Android2D Matrixで移動, 回転
画像の描画のコードを使って, 移動や回転などを追加します。
drawBitmapには, Matrixといういわゆる行列を引数にとることができます。この行列はBitmapの描画位置や, 画像に対する演算などを定義するための行列です。
この行列を変更し, 再描画(invalidate())することで, 移動などをすることができます。
Matrix に関するところはAndroid Developers を参考にするとよいです。3×3の行列だそうです。
public class DrawBitmapView extends View { private Paint paint; private Bitmap img; private Matrix matrix; public DrawBitmapView ( Context context ) { super(context); paint = new Paint(Paint.ANTI_ALIAS_FLAG); img = BitmapFactory.decodeResource(context.getResources(), R.drawable.mikasa); matrix = new Matrix(); } @Override protected void onDraw ( Canvas canvas ) { canvas.drawColor(Color.BLACK); canvas.drawBitmap(img, matrix, paint); } public void translateB( float dx, float dy ) { matrix.postTranslate(dx, dy); invalidate(); } public void scaleB ( float sx, float sy ) { matrix.postScale(sx, sy); invalidate(); } public void rotateB ( float degrees ) { matrix.postRotate(degrees); invalidate(); } public void skewB ( float kx, float ky ) { matrix.postSkew(kx, ky); invalidate(); } }
これをActivityから利用します。
public class MainActivity extends Activity { DrawBitmapView bView; @Override protected void onCreate ( Bundle savedInstanceState ) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bView = new DrawBitmapView(this); bView.setClickable(true); bView.setOnClickListener(new OnClickListener() { @Override public void onClick ( View v ) { bView.translateB(30, 30); } }); addContentView(bView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } }
Viewを定義して, クリックイベントを追加してみました。クリックすると移動します。