マトリックスでビットマップ画像を連続回転させる
今回は、オリジナルの View(MyNewView.class)に配置した画像を、マトリックス(Matrix)を使用し同じ位置で連続回転させるサンプルです。View に配置したビットマップ画像の回転方法がわからない・・・という方はぜひ参考にしてください。
サンプルコード①(MainActivity.java)
このサンプルは、画面を描画するオリジナルの View(MyNewView.class) を別ファイルにせず MainActivity の中に含めて「一体型」にしてあります。なお、サンプルコードの詳しい説明はコード内のコメントを参照してください。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//オリジナルの View(MyNewView.class)をセットして使用
setContentView(new MyNewView(this));
}
//オリジナルのView「MyNewView」
public class MyNewView extends View {
//各オブジェクト・変数を準備
private Bitmap bitmap;
private BitmapFactory.Options options;
private Resources resources;
private float kakudo;
public MyNewView(Context context) {
super(context);
//タイマーのインスタンス化
Timer timer1 = new Timer();
//角度変数の初期化
kakudo = 0;
//プロジェクトのリソースにアクセスするための準備
resources = context.getResources();
//ビットマップを読み込む際のオプションを準備
options = new BitmapFactory.Options();
//スケーリングを無効にセット(原寸大表示にする)
options.inScaled = false;
//リソース(drawable)から画像を読み込んで、同時にオプションを適用
bitmap = BitmapFactory.decodeResource(resources, R.drawable.donbei, options);
//タイマーにスケジュールを登録してスタート
timer1.schedule(new TimerTask() {
@Override
public void run() {
//角度の計算(2度ずつ回転)
kakudo += 2;
//表示の更新(描画用メソッドを呼び出している)
invalidate();
}
},100,100); //100ms後に100ms間隔で実行
}
//描画用メソッド
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//マトリックスを生成してインスタンス化
Matrix matrix = new Matrix();
//画像の中心を基準に画像を回転させる
matrix.setRotate(kakudo,bitmap.getWidth() / 2,bitmap.getHeight() / 2);
//回転させた画像をx=200,y=200の位置に移動
matrix.postTranslate(200,200);
Paint paint = new Paint(); //ペイントの生成とインスタンス化
paint.setAntiAlias(true); //アンチエイリアスを有効
paint.setColor(Color.BLACK); //黒色に設定
paint.setTextSize(50); //文字サイズを50に
//matrixを適用して画像を表示 + 現在角度の表示
canvas.drawBitmap(bitmap, matrix, null);
canvas.drawText("現在の角度:" + kakudo + "度",10,50, paint);
}
}
}
サンプルコード②(AndroidManifest.xml)
マニフェストファイルの記述はありません。
サンプルコード③(activity_main.xml)
画面表示にオリジナルの View(MyNewView.class)をセットするので、レイアウトファイルは使用しません。
実行結果
① 起動すると X座標200px、Y座標200px の位置に画像が表示され 100ms 間隔で2度ずつ回転を始めます。
② 画像はアプリを終了するまで回り続けます。
備考・その他
マトリックス(Matrix)の使い方がわかると、ちょっと変わったおもしろい動きを表現できるようになりますので、今回のサンプルのコードを変更していろいろとテストしてみてください。
END