gpt4 book ai didi

Android:SurfaceView 和 Z 级问题

转载 作者:太空狗 更新时间:2023-10-29 13:41:56 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com