いよいよ画像を描画します。
前回の記事で生成した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; }
この描画のやり方で、どんな端末でも同じ見え方になるはずです。。。
コメントを残す