【问题标题】:Anchoring a layout in a view for android在android的视图中锚定布局
【发布时间】:2012-02-09 16:06:49
【问题描述】:

我的问题直截了当。在任何安卓设备上打开相机应用程序。在纵向模式(默认 90 度)下,底部框架由用于相机功能的按钮组成,例如闪光灯、图像捕捉、访问图库等。将设备旋转到任意方向(180 度或 0 度)横向栏仍然粘在设备菜单按钮位置旁边的窗口空间中。该功能是如何实现的?将框架锚定到窗口的特定位置,以便设备方向发生变化,从而重新配置设备坐标系(整个视图/窗口中每个框架的 X 和 Y 值更改)对重绘框架没有影响。这可以通过为布局 xml 文件指定属性来轻松实现吗?或者这是否涉及编写复杂的代码?如果编程是唯一的选择,我会尽量让它尽可能简单。

谢谢。

【问题讨论】:

  • 我搜索了官方的 Camera.apk 源代码。从那里看到了几个解决方案。似乎默认的官方应用程序实际上是在相当复杂的设置中使用大量带有 Open GL API 的图形包代码。有了我所拥有的时间线,我不妨依赖于在 RelativeLayout 中使用 layout_align* 属性并处理方向更改并在 onConfigurationChanged 方法中传递新的布局参数。如果我成功实现了我的愿望,我会在几天内继续发布。
  • 有没有办法将整个 Activity 的内容视图锁定/冻结/修复/锚定到设备窗口,以便方向更改不会导致 Activity 重绘视图?我知道 Traffic Jam(游戏应用)在摩托罗拉 Xoom 平板电脑上做到了这一点。这对我来说非常有用。
  • 显然,修复活动的窗口很容易。 android:screenOrientation 正是这样做的。就在我的鼻子底下,我从来没有费心去查看开发指南。

标签: android layout view window anchor


【解决方案1】:

将视图锚定到布局的任何部分或其他任何事情都是使用相对布局完成的。如果您是相对布局的新手,请尝试我的教程。希望对您有所帮助:

Android 中相对布局的视觉指南

http://knowledge.lapasa.net/?p=334

【讨论】:

  • 您的教程内容丰富。但是,尽管锁定了活动 - android:configChanges="orientation",但仍会重新绘制相对布局和子视图以更改方向。我正在寻找的是将视图/布局锚定到窗口中的特定位置(就像相机应用程序的捕获图像按钮,通常放置在设备按钮的正上方),而与设备方向无关。抱歉,我知道你的教程没有多大帮助。
  • 哦,我现在明白了,我认为只有肖像或风景的标志,但没有其他两种可能性。为什么不尝试使用加速度计来确定要显示的布局?
  • 呐!!!加速度计只会让它过于复杂。我必须跟踪很多布局,该区域的坐标,不断调用 ViewGroup.removeView 和 ViewGroup.addView(index, view)。绝对没有心情冒险冒险并走复杂的路。而且 OpenGL 也很耗时。
【解决方案2】:

应该使用旋转动画。 1) 如果使用清单文件中 Activity 声明中的 android:screenOrientation 属性使显示窗口卡在特定方向,则 android:layoutAnimation 属性可用于布局文件中的 ViewGroup 实现。此属性采用 layoutAnimation 文件,该文件指向应使用的任何一个 Transformation Animations 文件。 2) 如果以编程方式引用膨胀布局,则布局动画可以根据用例和不同的转换动画文件在程序代码中动态执行多次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2017-11-08
    • 1970-01-01
    • 2013-04-10
    • 2013-09-01
    相关资源
    最近更新 更多