【发布时间】:2012-06-15 15:27:31
【问题描述】:
我想在一层上一层上创建Views 的层次结构,大致如下:
框架布局{
表面视图
查看
查看
表面视图
查看
表面视图
}
我希望每个SurfaceView 的绘制事件都出现在层次结构中的正确位置。例如,顶面应该出现在所有东西的前面。底部的应该出现在所有内容的后面。
不幸的是,我可以使用setZOrderOnTop(true) 使每个表面出现在所有物体的前面,并且我可以通过不这样做使每个表面出现在底部,但我不能让一个表面出现在中间。如何做到这一点?
【问题讨论】:
-
你不必使用FrameLayout,你可以在onCreate中使用addContentView()。我怀疑 Android 在这么多浏览量下会表现良好。一切都可以通过一两个视图来完成。
-
我在一侧有一系列按钮,所以实际上我不能使用活动的根
FrameLayout,但因为它是FrameLayout,所以这只是引出了问题。我的应用程序绝对要求我生成一个分层图形,其中的元素在相对静态的元素之间快速变化,因此我必须要么在View中实现复杂的自定义绘图,要么使用图层(最终自定义绘图将执行相同的处理)。 -
由于只有一个视图可以进行触摸输入,而用户只能看到一个表面,所以一切都取决于绘图的层次结构。带有画布的单个自定义视图可以完成这项工作。虽然有时低于正常的 android 视图,但可以为动画背景放置一个自定义视图。所以我看不出任何应用程序需要两个以上的真实层......我很好奇你想做什么......
-
我正在接收来自
FrameLayout的触摸事件,并根据需要将它们传递到表面;该应用程序基本上在三层中绘制,我使用SurfaceViews 处理活动绘图(需要快速更新)和其他Views 处理已绘制的元素(一旦它们停止被更改它们从SurfaceView移动到View)。而不是每次都重绘所有内容或使用中间Bitmaps(我相信你知道内存问题)我有这个层次结构。 -
是的,这是一种解决方案。您只需要检查帧速率并查看它的性能。我认为另一个视图为其画布占用另一个屏幕内存缓冲区。我知道处理内存有多么困难,因为我在市场上有一个使用大图像的应用程序 Kaleido-Magic...
标签: android surfaceview layer