【Android】SurfaceViewで複数画像を重ねて描画する

複数の画像をView上で重ねて表示したい

【準備画像】
準備画像パーツ

今回は、SurfaceViewをActivityとは別クラスで準備する。

【Activity000.java】

public class Activity000 extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// SurfaceViewのインスタンスを生成してビューを追加する
		setContentView(new TestSurfaceView(this));
	}
}

SurfaceViewの実装する場合、SurfaceHolderをインターフェイスとして使う為、
描画用のコールバックを準備する必要がある。

■コンストラクタを含めた4つのメソッドを準備する
・SurfaceViewのコンストラクタ
・SurfaceHolder.Callback.surfaceCreated()
・SurfaceHolder.Callback.surfaceChanged()
・SurfaceHolder.Callback.surfaceDestroyed()

※コンストラクタ:クラスからオブジェクトを作成した際に、自動的に実行されるメソッドのこと

【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) {
		// 処理がない場合も必要
	}
}

【実行結果】
SurfaceViewで画像を重ねる

【Android】SurfaceViewで複数画像を重ねて描画する” への1件のコメント

  1. ピンバック: 【Android】FrameLayoutでSurfaceViewとTextViewと重ねて表示する|俺メモ Web時々アプリ | OREMEMO

コメントを残す

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

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