SurfaceViewで画像を描画する


いよいよ画像を描画します。
前回の記事で生成したBitmapですが、そのまま貼り付けようとすると、端末によって画面の大きさが違い座標がバラバラになるため、同じ画面になりません。
画面の大きさに応じて座標を再計算して、その上で描画しなくてはなりません。

[AnimationSurfaceView.java]

	private void Draw() {
		//背景
		drawBitmap(bm[Const.IMAGE_BG], Const.POS_X_BG, Const.POS_Y_BG);
		//枠
		drawBitmap(bm[Const.IMAGE_WAKU], Const.POS_X_WAKU, Const.POS_Y_WAKU);
		//ブロック
		DrawBlock();
		//バー
		drawBitmap(bm[Const.IMAGE_BAR], bar_pos_x, bar_pos_y);
		//ボール
		int draw_ball_pos_x = ball_pos_x / Const.DRAW_MAGNI;
		int draw_ball_pos_y = ball_pos_y / Const.DRAW_MAGNI;
		drawBitmap(bm[Const.IMAGE_BALL], draw_ball_pos_x, draw_ball_pos_y);
	}

	private void drawBitmap(Bitmap image, int x1, int y1) {
		int draw_x1 = Const.exchangePOSX(x1, screen_width);
		int draw_y1 = Const.exchangePOSY(y1, screen_height);
		
		main_canvas.drawBitmap(image, draw_x1, draw_y1, paint_iamge);
	}

いったん、drawBitmap()というメソッドを経由して座標を計算しています。
この座標というのは、想定するもともとの画像の大きさと照らし合わせて計算されます。
計算メソッドは下記のようになります。
[Const.java]

	public static int IMAGE_WIDTH	= 320;
	public static int IMAGE_HEIGHT	= 480;
	public static int DRAW_MAGNI	= 100;

	public static final int POS_X_BG = 0;
	public static final int POS_Y_BG = 0;
	
	public static final int POS_X_WAKU = 10;
	public static final int POS_Y_WAKU = 20;
	public static final int WAKU_W = 300;
	public static final int WAKU_H = 440;
・
・・・その他の定数宣言は省略
・

	//描画枠のサイズに合わせて実際の座標を求める
	public static int exchangePOSX(int calc_x, int width) {
		float magni = (float)width / IMAGE_WIDTH;
		float draw_x = (float)calc_x * magni;
		return (int) draw_x;
	}
	public static int exchangePOSY(int calc_y, int height) {
		float magni = (float)height / IMAGE_HEIGHT;
		float draw_y = (float)calc_y * magni;
		return (int) draw_y;
	}

この描画のやり方で、どんな端末でも同じ見え方になるはずです。。。

カテゴリー: Android, Java, プログラム

コメントを残す

メールアドレスが公開されることはありません。