Android アプリ開発「MATRIX」

Androidアプリの開発に役立つサンプル集


マトリックス(Matrix)を使ってビットマップ画像を連続回転させる方法

マトリックスでビットマップ画像を連続回転させる

今回は、オリジナルの 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);
//オリジナルの ViewMyNewView.class)をセットして使用
setContentView(new MyNewView(this));
}

//オリジナルのViewMyNewView
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