2

GLSurfaceViewまたはSurfaceView内の境界領域内に任意のビューを描画することは可能ですか?

現在、私のGLSurfaceViewはビットマップテクスチャでいっぱいです。

こんなことを成し遂げたい

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

FrameLayoutを使用してこれを実行し、GLSurfaceviewの上部にビューを描画しようとしましたが、それは私が達成しようとしていることではありません。

ありがとう。

4

3 に答える 3

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 にアタッチされGLSurfaceViewていると、重複領域でfalseが返され、イベントが他のビューに伝播されます。

PS:英語が下手でごめんなさい。

于 2012-11-27T16:41:07.760 に答える
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 に答える
0

はい、できます。GLSurfaceViewはビューの1つであるため、他のビューとのレイアウトにバインドできます。ただし、setZOrderOnTop()をfalseに設定することを忘れないでください。

また、Android 2.xのOpenGLは4.xほど良くないことを忘れないでください(つまり、2.xで発生するいくつかの問題を回避する必要があります)

于 2012-11-20T01:51:13.673 に答える