我有一个带有透明背景的SurfaceView,可以在上面绘制东西,最重要的是,我想绘制一个ImageView。为了使SurfaceView透明,我必须设置surfaceView.setZOrderOnTop(true)
,但是问题是,现在,我的surfaceview的画布绘制在imageview的顶部,由于setZOrderOnTop(true)
,这很有意义。我的问题是,有没有办法实现我想要的?具有透明背景的SurfaceView和位于其顶部的ImageView?
谢谢,弗拉德
编辑:好的,所以这不可能。请参阅下面的fadden答案,或更深入地了解https://www.youtube.com/watch?v=duefsFTJXzc&feature=feedwll&list=WL。
SurfaceView
不能完成您想做的事情。
所有视图都组成一个图层。 SurfaceView
有两个部分,“视图”部分(它只是一个透明的占位符)和“表面”部分。后者是一个完全独立的层。
因此,您可以将“曲面”部分放在所有其他视图之上或之下,但不能在两者之间。 TextureView
可以满足您的要求,但是您需要为此使用API 14 +。
但是,您可以具有多个SurfaceView
,并将“表面”层放置在不同的Z层。有充分的理由不执行此操作-一旦您拥有N个以上的曲面,系统合成器可能会切换到效率较低的工作模式-但这是可能的。有关示例,请参见Grafika中的“多表面测试”。
您可以将ImageView放在PopupWindow内。它可以来自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位置。