Android:SurfaceView 和 Z 级问题

标签 android android-canvas transparency surfaceview android-framelayout

我有一个 FrameLayout,它首先包含一个 SurfaceView,然后是一个包含各种 Button 和 TextView 的 RelativeLayout。

在 SurfaceView 的 Canvas 上,我正在绘制大量位图,并且通过触摸和运动事件允许用户拖动它们。

这些位图,当四处拖动时,通过 RelativeLayout 内的按钮等下方

现在,我的(可能是错误的)理解是 SurfaceView 的“Z 级”,或者它所传递的任何东西,与 实际 的 Z 级完全无关布局的其余部分。是这样吗?如果是这样,我该如何绕过它,以便将拖动的位图绘制在其他 View 之上?或者还有什么其他方法可以实现全屏 Canvas ,但不让我的按钮等像覆盖控件一样工作。

我想我真正需要的是一个底层,触摸事件仍然可以被下面的按钮等拾取。但我不知道如何实现这一点,因为在重绘我的 Canvas 时,我还必须重绘背景。

能否调换FrameLayout中RelativeLayout和SurfaceView的顺序,然后让Canvas的背景透明?如果是这样怎么办?触摸事件是否仍会“落入”下面的按钮?

谢谢你的包容,我知道我有点胡说八道。

最佳答案

SurfaceView 不是那样工作的。

SurfaceView 有两部分,“ View ”部分和“表面”部分。 “ View ”部分是一个透明孔,与其他 View 元素一起布局,并合成到 View 层上。 “表面”部分是一个完全独立的层,将被定位和缩放以匹配“ View ”部分,并由系统合成器而不是应用合成。

您可以在首次创建 SurfaceView 时控制“表面”层的 Z 顺序,但它将位于所有 View 元素的上方或下方。它不能高于某些 View 而低于其他 View ,因为它们是完全独立的层。 “表面”层不捕获输入事件,因此将其放在顶部(通过 SurfaceView#setZOrderOnTop())不会影响输入焦点。

对于 API 14+,您可以使用 TextureView,它的行为对 View 更友好。

编辑:有关完整详细信息,请参阅 much longer explanation .

关于Android:SurfaceView 和 Z 级问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669489/

相关文章:

C# 在 50% 不透明窗体上绘制的透明实心矩形

pdf - 使用 GhostScript 将 PDF 转换为透明 PNG

android 为整个应用程序指定语言环境

android - Intent Service 永远不会被调用

android - 无法根据 android 中的给定文本对齐可绘制矩形坐标?

android - 在 ImageView 上移动形状?

android - react-native react-navigation-drawer 在 App 启动时默认保持打开状态

Android 软键盘操作按钮

android - 位图着色器和 canvas.scaling android

delphi - 有没有办法让 TRadioButton 透明?