我昨天花了一些时间在 android 布局(...或更好的自定义布局)上苦苦挣扎。对于一般用途的表单,androids 提供的开箱即用布局绰绰有余。但是当涉及到更复杂的用例时(让我们以旋转木马为例,在椭圆路径上重叠图像),我很快意识到了 android API 的局限性和复杂性。这是我的方法:
使用开箱即用的布局不是一种选择(对于许多难以处理的问题要处理),但是需要可以添加到容器中的图形对象(例如 ImageView),以便轻松执行平移、旋转、等等...通过内置动画。
AbsoluteLayout 似乎是可用于此目的的最合理的布局。它允许添加派生视图对象并编写您自己的算法来定位它们。但是......它已被弃用。真可惜!谁想使用已弃用的 api?
下一个最合理的做法是编写自己的布局子类化神秘的 ViewGroup.. 这就是所有事情都崩溃的地方(至少对我来说是这样)。编写自己的 swing 自定义布局是复杂、误导和棘手的(实际上我几年前就这样做了,我记得要更简单)。
然后(在绝望的驱使下)对视图进行子类化,覆盖 onDraw 方法并直接在 Canvas 上绘图似乎是唯一直接的解决方案(尽管这让我想起了 java2D 的日子......花费了很长时间来实现你的高 1%项目),但随后您将放弃希望应用于画布上绘制的图形的方便的内置动画 API。
结论是,除非我遗漏了什么,否则当前的 android 架构与其他一些 UI 技术(如 flash 或 javafx)提供的编程范式有点远(我可以轻松地在 javafx 和 flash 中实现上述轮播)。原因是,例如在 javafx 中,Scene 对象(类似于 android 的 View 概念)默认提供绝对布局。然后,您可以根据需要应用其他开箱即用的布局。但是对于需要自定义布局的场景,您无需执行任何操作。
我有点惊讶于这个选项在 android 中不可用,毕竟这是其他 ui 技术解决的一个非常普遍的需求。我仍然喜欢认为在 android 中我还没有找到第 5 个选项。有哪位专家可以提供有关该主题的一些信息吗?
谢谢。