将ImageView放在透明SurfaceView上

时间:2014-04-02 16:52:34

标签: android surfaceview transparent

我有一个透明背景的SurfaceView,我在上面绘制东西,最重要的是我想要绘制ImageView。 为了使SurfaceView透明,我必须设置surfaceView.setZOrderOnTop(true),但问题是现在,我的surfaceview的画布被绘制在imageview之上, 因setZOrderOnTop(true)而有意义。 我的问题是,有没有办法实现我想要的?具有透明背景和顶部有ImageView的SurfaceView?

谢谢, 维拉德

编辑:好的,所以这是不可能的。请参阅下面的fadden的答案,或https://www.youtube.com/watch?v=duefsFTJXzc&feature=feedwll&list=WL以获得更深入的理解。

2 个答案:

答案 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位置。

相关问题