Android自定义布局
我昨天花了一些时间与Android布局挣扎(...或更好的自定义布局)。对于一般用途来说,android提供的开箱即用的布局绰绰有余。但是当涉及到更复杂的用例时(让我们以旋转木马的例子重叠放置在椭圆路径上的图像),我很快意识到了android API的局限性和复杂性。这是我的方法:Android自定义布局
使用开箱布局是不是一种选择(许多难以处理的问题处理),可以添加到一个容器图形对象但需要(比如说例如ImageView的)是必要的,以便通过内置动画轻松执行翻译,旋转等。
AbsoluteLayout似乎是最合理的布局可用于此目的。它允许添加派生视图对象并编写自己的算法来定位它们。但是......它被弃用了。真遗憾!谁想要使用已弃用的API?
下一个最合理的做法是编写自己的布局子类Mystic ViewGroup ..这里是所有东西都分崩离析(至少它对我来说)。这很复杂,误导和棘手,尽可能为自己编写自定义布局的摆动(我实际上是在几年前做过的,而且我记得更简单)。
然后(由绝望驱动)对View进行子分类,覆盖onDraw方法并直接在Canvas上绘图似乎是唯一直接的解决方案(尽管这让我想起了java2D的日子......花了很长时间来实现高1%的项目),但是你放弃了你想要应用到画布上绘制的图形的动画API中构建的方便。
的结论是,除非我错过了一些东西,目前的Android架构是有点远从其他一些UI技术如闪存或JavaFX的提供的编程范式(我可以很容易地实现上述的旋转木马在javafx和flash中)。 原因在于,在javafx中,Scene对象(与Android的View概念相当)默认提供绝对布局。如果您愿意,您可以应用其他开箱即用的布局。但对于需要自定义布局的场景,您无需执行任何操作。
我有点惊讶,这个选项在android中不可用,毕竟是其他ui技术解决的常见需求。我仍然想认为在Android中有第五个选项,我没有找到。 那里有哪些专家可以提供有关该主题的一些信息?
谢谢。
有一个很好的例子:http://www.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html
分44
,甚至更好的:http://www.google.com/events/io/2009/sessions/SupportingMultipleDevicesBinary.html
现在这两个链接都被打破了。当您在答案中包含外部链接时,您应始终提供回复摘要。 – manfcas 2016-10-30 19:17:52
这是一个奇妙的问题。目前我正在为3.0或更高版本编程,并且在很多情况下决定大部分都坚持使用AbsoluteLayouts。尽管它被设置为不推荐使用,但编译为3.0ish和更低版本仍然可以在4系统和更高版本系统上运行一段时间。我自己寻找这个答案(为未来版本的操作系统,将其切出)。他们之所以切断它的原因是因为Android上的屏幕分辨率没有标准化。
我的建议是将AbsoluteLayouts用于我们尽可能长的时间。我也认为我们应该开始推动,让Google知道它们对于他们的平台仍然是非常必要的API。
大问题:-)
[Android开发小组的每Dianne Hackborn](http://androiddiscuss.com/1-android-discuss/38183.html),“我会再说一遍:我们不打算从未来版本中移除AbsoluteLayout,但我们强烈不鼓励人们使用它。“所以如果它真的是最能满足你的需求的,那就用它吧。 – jk7 2017-06-21 21:33:23
我认为Android的布局最用例是伟大的与用户进行交互,但(大但)的布局机制是非常微妙和棘手的是要正确扩展。对于小型的tweeks来说很好,但如果你想做一些不寻常的事情(比如动画轮播),那么你可能会使用免费的图形,所以你不需要额外的扩展Layout。这只是更多的限制,没有正当的附加价值。
大多数应用程序都有一些标准的东西(ActionBar,按钮,首选项,对话框等)以及一个或多个“独特”元素。所以我的建议是使用标准布局的标准东西,但为您的独特元素使用其中之一:
1)SurfaceView - 非常容易使用。请参阅官方Lunar Lander代码示例。 要观看SurfaceView的动作,您还可以看看my app视频,该视频使用SurfaceView作为动画元素,并且所有内容都使用RelativeLayout进行布置。
2)opengl - 这是Android上最强大的图形处理方式。它运行在GPU上,因此CPU可以自由地做其他事情。它是3D(或2D,如果你只是使用一架飞机)。 我使用的是libgdx,这很棒,并且在短暂的学习之后并不困难。
两个SurfaceView和OpenGL(GLSurfaceView)的意见,这样他们就可以将其添加到布局的任何其他视图
上自定义布局可用的文件似乎相当含糊的给我,但我终于找到一些有用的东西: 下面是一个很好的简单示例布局,展示了如何连接XML和Java代码: How to layout a 'grid' of images in the center of the screen 这里是一篇文章,解释我缺少的一个关键问题: http://www.arpitonline.com/blog/2012/07/01/creating-custom-layouts-for-android/。 显然必须重写onMeasure并为每个孩子调用measure()。
好问题!继承人我几乎相同的问题:http://stackoverflow.com/questions/4953351/android-how-to-draw-a-letter-at-a-specific-point ...为什么有所有这些意见和动画,如果你不能利用它们? – Mark 2011-02-10 05:07:15