Androidプログラマへの道 〜 Moonlight 明日香 〜 - Canvasの座標軸を変換する
キャンバス(Canvas)を平行移動, 回転, 拡大させるには, 描画の基準となる座標軸を操作する.

平行移動

座標軸を縦横指定の幅だけ移動する.
  • TranslateCanvas.java
    • Canvas#translateメソッドで, dx, dyそれぞれ100平行移動させる.
package com.moonlight_aska.android.TranslateCanvas;

import android.os.Bundle;
import android.view.View;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;

public class TranslateCanvas extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    MyView view = new MyView(getApplication());
    setContentView(view);
  }

  class MyView extends View {
    private Bitmap robot;
    private Paint paint = new Paint();

    public MyView(Context context) {
      super(context);
      // TODO Auto-generated constructor stub
      robot = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    }

    @Override
    protected void onDraw(Canvas canvas) {
      // TODO Auto-generated method stub
      // dx, dyそれぞれ100平行移動
      canvas.translate(100, 100);
      // 平行移動したキャンバスにBMP画像を描画
      canvas.drawBitmap(robot, 0, 0, paint);
    }
  }
}~


回転

座標軸を回転する.
ラジアン単位による回転角度で指定することで, 時計回りに座標軸が回転する.
  • RotateCanvas.java
    • Canvas#rotateメソッドで, 点(100, 100)を中心に45度時計回りに回転させる.

  class MyView extends View {
    private Bitmap robot;
    private Paint paint = new Paint();

    public MyView(Context context) {
      super(context);
      // TODO Auto-generated constructor stub
      robot = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    }

    @Override
    protected void onDraw(Canvas canvas) {
      // TODO Auto-generated method stub
      // 点(100, 100)を中心に45度回転
      canvas.rotate(45, 100, 100);
      // 回転したキャンバスにBMP画像を描画
      canvas.drawBitmap(robot, 100, 100, paint);
    }
  }


拡大

座標軸の目盛りを拡大する.
  • ScaleCanvas.java
    • Canvas#scaleメソッドで, 目盛りを拡大する.
  class MyView extends View {
    private Bitmap robot;
    private Paint paint = new Paint();

    public MyView(Context context) {
      super(context);
      // TODO Auto-generated constructor stub
      robot = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    }

    @Override
    protected void onDraw(Canvas canvas) {
      // TODO Auto-generated method stub
      // 目盛りを2倍に拡大
      canvas.scale(2, 2);
      // 目盛りを拡大したキャンバスにBMP画像を描画
      canvas.drawBitmap(robot, 100, 100, paint);
    }
  }