GLSurfaceViewはOpenGLを使うためのViewですが、まだ上手に使う事ができないので、サンプルのファイルをそのまま持ってきました。とりあえず、透過させてSurfaceViewに重ねる部分がメインです。
参考にしたのはこちら。
■レイアウトのXML
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <android.opengl.GLSurfaceView android:id="@+id/MyGLSurfaceView"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />
    <SurfaceView android:id="@+id/MySurfaceView"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />
</FrameLayout>
GLSurfaceViewを上に記述します。
■重ねる部分のactivity
public class GLSurfaceViewActivity extends Activity{
    private SurfaceView mSurfaceView;
    private SurfaceHolder mHolder;
    private MySurfaceViewCallback mMySurfaceViewCallback;
    private GLSurfaceView mGLSurfaceView;
    private Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = getApplicationContext();
        setContentView(R.layout.main);
        mGLSurfaceView = (GLSurfaceView)findViewById(R.id.MyGLSurfaceView);
        mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
        mGLSurfaceView.getHolder().setFormat( PixelFormat.TRANSLUCENT );
        mGLSurfaceView.setRenderer(new CubeRenderer(true));
        mMySurfaceViewCallback = new MySurfaceViewCallback(mContext);
        mSurfaceView = (SurfaceView)findViewById(R.id.MySurfaceView);
        mHolder = mSurfaceView.getHolder();
        mHolder.addCallback(mMySurfaceViewCallback);
    }
    @Override
    protected void onResume() {
        super.onResume();
        mGLSurfaceView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        mGLSurfaceView.onPause();
    }
}
GLSurfaceViewのsetFormatの部分で半透明にします。
CubeRendererはサンプルのクラスをそのまま引用しました。new CubeRenderer(true)でtrueを渡す必要があります。
これでGLSurfaceViewをSurfaceViewに重ねる事ができました。GLSurfaceViewには動きも加わっています。
 
0 件のコメント:
コメントを投稿