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