是否可以在GLSurfaceView中绘制View或ViewGroup

时间:2012-11-04 19:52:55

标签: android view surfaceview viewgroup glsurfaceview

是否可以在GLSurfaceView或SurfaceView内的有界区域内绘制任何视图?

目前我的GLSurfaceView填充了位图纹理。

我想实现类似的目标

   +---------------------------------+
   |                                 |
   |         GLSurfaceView           |
   |                                 |
   |        +-------------+          |
   |        |WhateverView/|          |
   |        | Layout/     |          |
   |        |ViewGroup    |          |
   |        +-------------+          |
   |                                 |
   +---------------------------------+

我尝试使用FrameLayout在GLSurfaceview的顶部绘制View,但这不是我想要实现的目标。

感谢。

3 个答案:

答案 0 :(得分:1)

我有同样的问题。我在下面使用了这个技巧。

使用AbsoluteLayout重叠GLSurfaceView和其他View

AbsouluteLayout -+-- GLSurfaceView
                 +-- View

GLSurfaceView设为透明。

mGlSurfaceView.setEGLContextClientVersion(2);
mGlSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
mGlSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
mGlSurfaceView.setRenderer(new GLES20TriangleRenderer(this));
mGlSurfaceView.setZOrderOnTop(true);

添加一个打孔。不要在GLSurfaceView中渲染重叠区域。附加到OnTouchListener的{​​{1}}在重叠区域中返回false,以将事件传播到其他视图。

PS:抱歉我的英语很差。

答案 1 :(得分:0)

尝试创建自己的类扩展GLSurfaceView,覆盖方法draw(Canvas)并使用view / viewgroup的方法draw(Canvas)在其中绘制视图。它将是这样的:

public class MyGLSurfaceView extends GLSurfaceView
{
    private View myView;

    @Override
    protected void onDraw(Canvas canvas) {
        // Draw something below your view
        // Translate, rotate your canvas as you want
        myView.draw(canvas);
        canvas.restore(); // If you have translated or rotated the canvas
        // Draw something above your view
    }
}

答案 2 :(得分:0)

是的,您可以,因为GLSurfaceView是View之一,您可以将其绑定到具有其他视图的布局中。但请记住将setZOrderOnTop()设置为false。

请记住,Android 2.x中的OpenGL不如4.x中的那么好(这意味着你必须解决2.x中发生的一些问题)