安卓自定义布局

标签 android android-layout

我昨天花了一些时间在 android 布局(...或更好的自定义布局)上苦苦挣扎。对于一般用途的表单,androids 提供的开箱即用布局绰绰有余。但是当涉及到更复杂的用例时(让我们以椭圆形路径上重叠图像的旋转木马为例),我很快意识到了 android API 的局限性和复杂性。这是我的方法:

  1. 使用开箱即用的布局不是一种选择(对于许多难以处理的问题要处理),但是需要可以添加到容器中的图形对象(例如 ImageView),以便通过内置动画轻松执行平移、旋转等。

  2. AbsoluteLayout 似乎是最合理的布局。它允许添加派生 View 对象并编写您自己的算法来定位它们。但是......它已被弃用。真可惜!谁想使用已弃用的 api?

  3. 下一个最合理的做法是编写自己的布局子类化神秘的 ViewGroup.. 这就是一切崩溃的地方(至少它对我来说是这样)。编写自己的 swing 自定义布局一样复杂、误导和棘手(实际上我几年前就这样做了,我记得要更简单)。

  4. 然后(在绝望的驱使下)子类化一个 View,覆盖 onDraw 方法并直接在 Canvas 上绘图似乎是唯一直接的解决方案(尽管这让我想起了 java2D 的日子......花了很长时间来实现项目的最高 1%),但是您放弃了方便的内置动画 API,您希望将其应用于 Canvas 上绘制的图形。

结论是,除非我遗漏了什么,否则当前的 android 架构与其他一些 UI 技术(如 flash 或 javafx)提供的编程范式有点远(我可以在 javafx 和 flash 中轻松实现上述轮播) )。 原因是,例如在 javafx 中,Scene 对象(类似于 android 的 View 概念)默认提供绝对布局。然后,您可以根据需要应用其他开箱即用的布局。但对于需要自定义布局的场景,您无需执行任何操作。

我有点惊讶这个选项在 android 中不可用,毕竟这是其他 ui 技术解决的非常普遍的需求。我仍然喜欢认为在 android 中我还没有找到第 5 个选项。 有没有专家可以提供有关该主题的一些信息?

谢谢。

最佳答案

我认为 Android 布局非常适合大多数与用户交互的用例,但是(一个很大的但是)布局机制非常微妙,并且很难正确扩展。对于小的 tweeks 来说这很好,但如果你想做一些与众不同的事情(比如动画轮播),你可能还是会做免费的图形,所以你不需要扩展 Layout 的额外复杂性。这只是更多的限制,没有合理的附加值。

大多数应用程序都有一些标准的东西(ActionBar、按钮、首选项、对话框等),以及一个或多个“独特”元素。所以我的建议是对标准的东西使用标准布局,但对于您的独特元素,请使用以下之一:

1) SurfaceView - 非常易于使用。见官方Lunar Lander代码示例。 要查看 SurfaceView 的实际效果,您还可以查看 my app video,动画元素使用SurfaceView,一切都用RelativeLayout布局。

2) opengl - 这是在 Android 上进行图形处理的最强大的方法。它在 GPU 上运行,因此 CPU 可以自由地做其他事情。它是 3D(或 2D,如果您只使用一架飞机)。 我正在使用 libgdx ,而且很不错,学了一点也不难。

SurfaceView 和 opengl (GLSurfaceView) 都是 View ,因此它们可以像任何其他 View 一样添加到布局中

关于安卓自定义布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3268068/

相关文章:

Android垂直划分屏幕的一小部分

java - Android布局中string.xml中的字符串格式

android - 为什么 marginBottom 不起作用?

java - 如何在java中以编程方式从任何句子的中间获取输入?

Android onClick 只能工作一次

android - ExpandableListView 和滚动

java - Android 库中的 string.xml

android - 在 Android 中获取外部 SDCard 位置

android - 撰写错误 - 导入后 "Unresolved reference: align"

android - Appcompat Alert Dialog Action 按钮背景 On pressed state