Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:SurfaceView和Z级问题_Android_Android Canvas_Transparency_Surfaceview_Android Framelayout - Fatal编程技术网

Android:SurfaceView和Z级问题

Android:SurfaceView和Z级问题,android,android-canvas,transparency,surfaceview,android-framelayout,Android,Android Canvas,Transparency,Surfaceview,Android Framelayout,我有一个FrameLayout,第一个是SurfaceView,第二个是RelativeLayout,它依次包含各种按钮和文本视图 在SurfaceView的画布上,我绘制了许多位图,并通过触摸和运动事件允许用户拖动它们 当拖动这些位图时,会在RelativeLayout内的按钮等下方通过 现在,我的理解(可能是错误的)是,SurfaceView的“Z级”或任何被认为是它的东西,与布局其余部分的实际Z级完全无关。是这样吗?如果是这样的话,我该如何绕过它,以便在其他视图的顶部绘制拖动的位图?或者,

我有一个FrameLayout,第一个是SurfaceView,第二个是RelativeLayout,它依次包含各种按钮和文本视图

在SurfaceView的画布上,我绘制了许多位图,并通过触摸和运动事件允许用户拖动它们

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

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

我想我真正需要的是一个参考底图,在这里,触摸事件仍然可以通过下面的按钮等拾取。但我不知道如何做到这一点,因为在重画画布时,我还必须重画背景

我可以在FrameLayout内交换RelativeLayout和SurfaceView的顺序,然后使画布的背景透明吗?如果是,怎么做?触摸事件是否仍会“穿透”到下面的按钮


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

你能再澄清一点吗?在SurfaceView中,您是否指定了背景?如果不是,如果您的目的只是简单地拖动片段,那么您可能也可以使用AbsoluteView。如果没有背景,您应该能够将整个视图放置在您拥有的相对视图之上,并且只在顶部的视图上绘制了各种按钮等,这将是可拖动的,并保持在所有其他视图之上。

SurfaceView不以这种方式工作

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

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

对于API 14+,您可以使用TextureView,它的行为方式更为视图友好


编辑:有关详细信息,请参阅。

您好,谢谢回复。当拖动位图时,它会在MotionEvent期间留下自己重新绘制副本的轨迹,除非在绘制所述位图的当前位置之前将画布背景设置为(例如)COLOR.Black。因此,是的,SurfaceView/画布有一个背景。