【Android】FrameLayoutでSurfaceViewとTextViewと重ねて表示する

前回、「SurfaceViewで複数画像を重ねて描画する」で作成したSurfaceViewとTextViewを重ねる。

FrameLayoutでSurfaceViewとTextViewを重ねる

今回は、複数のViewを重ね合わせて表示することができるFrameLayoutを使用する。

【Activity000.java】

public class Activity000 extends Activity {

	// LayoutParamsにセットするパラメータを準備
	private final int FP = ViewGroup.LayoutParams.FILL_PARENT; 
	private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// FrameLayoutを準備
		FrameLayout fl = new FrameLayout(this);
		setContentView(fl);
 
		// FrameLayoutにSurfaceViewをセットする
		fl.addView(new TestSurfaceView(this),new ViewGroup.LayoutParams(WC, WC));
        
		// SurfaceViewと重ねるTextViewを準備
		TextView tv = new TextView(this);
		tv.setText("SurfaceViewとTextViewを重ねる");
		tv.setHeight(120);
		tv.setTextColor(Color.BLACK);
		tv.setBackgroundColor(Color.WHITE);
        
		// FrameLayoutにTextViewをセットする
		fl.addView(tv, new ViewGroup.LayoutParams(FP, WC));
	}
}

FrameLayoutはViewGroupでnewする事に注意!!

【実行結果】

SurfaceViewとTextViewを重ねる

念のため、前回のSurfaceView
【TestSurfaceView.java】

public class TestSurfaceView extends SurfaceView implements SurfaceHolder.Callback{
	
	// 表示する画像
    private Bitmap image01;
    private Bitmap image02;
    private Bitmap image03;
     
    // コンストラクタ
    public TestSurfaceView(Context context) {
        super(context);
         
        getHolder().addCallback(this);
        // Bitmapリソースを用意
        image01 = BitmapFactory.decodeResource(getResources(), R.drawable.face);
        image02 = BitmapFactory.decodeResource(getResources(), R.drawable.eye);
        image03 = BitmapFactory.decodeResource(getResources(), R.drawable.mouth);
    }
     
    // SurfaceView生成時に呼び出される(初期画面の描画)
    public void surfaceCreated(SurfaceHolder holder) {
        // Canvas取得しロックする
        Canvas canvas = holder.lockCanvas();
        Paint paint = new Paint();
        paint.setColor(Color.WHITE);
         
        // 描画処理
        canvas.drawBitmap(image01, 0, 0, paint);
        canvas.drawBitmap(image02, 0, 0, paint);
        canvas.drawBitmap(image03, 0, 0, paint);
         
        // LockしたCanvasを解放する
        holder.unlockCanvasAndPost(canvas);
    }
     
    // SurfaceView変更時に呼び出される(画面の更新処理)
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // 処理がない場合も必要
    }
     
    // SurfaceView破棄時に呼び出される(画面の削除、削除後の処理)
    public void surfaceDestroyed(SurfaceHolder holder) {
        // 処理がない場合も必要
    }
}

【Android】FrameLayoutでSurfaceViewとTextViewと重ねて表示する” への1件のコメント

  1. ピンバック: 【Android】FrameLayout内でTextViewにマージンを指定する|俺メモ Web時々アプリ | OREMEMO

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>