Android 将ImageView放置在透明表面视图上

Android 将ImageView放置在透明表面视图上,android,surfaceview,transparent,Android,Surfaceview,Transparent,我有一个带有透明背景的SurfaceView,我在上面画东西,在上面我想画一个ImageView。 为了使SurfaceView透明,我必须设置SurfaceView.setZOrderOnTop(true),但问题是现在,我的SurfaceView画布绘制在imageview的顶部, 这是有意义的,因为setZOrderOnTop(true)。 我的问题是,有没有办法实现我想要的?具有透明背景和顶部图像视图的SurfaceView 谢谢, 弗拉德 编辑:好的,所以这是不可能的。请参阅下面法登的

我有一个带有透明背景的SurfaceView,我在上面画东西,在上面我想画一个ImageView。 为了使SurfaceView透明,我必须设置
SurfaceView.setZOrderOnTop(true)
,但问题是现在,我的SurfaceView画布绘制在imageview的顶部, 这是有意义的,因为
setZOrderOnTop(true)

我的问题是,有没有办法实现我想要的?具有透明背景和顶部图像视图的SurfaceView

谢谢, 弗拉德


编辑:好的,所以这是不可能的。请参阅下面法登的答案,或进一步了解。

你不能用一个
SurfaceView
来做你想做的事

所有视图都组合到一个图层上。
SurfaceView
有两个部分,“视图”部分(它只是一个透明的占位符)和“曲面”部分。后者是一个完全独立的层

因此,您可以将“曲面”部分置于所有其他视图之上或所有其他视图之下,但不能将其置于两者之间。
TextureView
将执行您想要的操作,但您需要使用API 14+


但是,您可以有多个
SurfaceView
,并将“Surface”层放置在不同的Z级别。有很好的理由不这样做——一旦有超过N个曲面,系统合成器可能会切换到效率较低的操作模式——但这是可能的。有关示例,请参见中的“多曲面测试”。

您可以将ImageView放置在弹出窗口中。它可以来自xml布局

例如:

View popupView = layoutInflater.inflate(R.layout.popuplayout, null);
PopupWindow myPopup = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
myPopup.setOutsideTouchable(true);
myPopup.showAtLocation(rootView, Gravity.TOP | Gravity.LEFT, 100, 100);

其中100,100是您的x,y位置。

为什么?为什么不在SurfaceView中绘制ypur图像?我正在构建一个库,用户将此ImageView传递给我,因此图像本身在任何地方都没有。他不能传递位图或可绘制图像吗?嗯,我们的整个设计基于使用普通视图。。他可能想给我一个文本视图,尽管我很在乎。你当然可以把ImageView放在SurfaceView的上面。简单的FrameLayout可以做到这一点,但整体性能可能会受到影响