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を定義して, クリックイベントを追加してみました。クリックすると移動します。
