2011年9月14日水曜日

SurfaceViewにGLSurfaceViewを重ねる

画像のSurfaceViewにGLSurfaceViewを重ねることを試してみます。

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 件のコメント:

コメントを投稿