2

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

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

我想实现这样的目标

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

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

谢谢。

4

3 回答 3

1

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

用于AbsoluteLayout重叠GLSurfaceViewView

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 附加到GLSurfaceView在重叠区域中返回 false 以将事件传播到其他视图。

PS:对不起我的英语不好。

于 2012-11-27T16:41:07.760 回答
0

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

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

于 2012-11-20T01:51:13.673 回答
0

尝试创建自己的扩展 GLSurfaceView 的类,覆盖方法 draw(Canvas) 并使用视图/视图组的方法 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
    }
}
于 2012-11-04T22:15:12.067 回答