ビットマップを正しく回転させるのに問題があります。私はそれに複数のビットマップを持つSurfaceViewを持っています。これらのビットマップは、arraylist内に存在し、forループを使用して、onDrawメソッド内のそれぞれに対してcanvas.drawBitmapを呼び出します。Androidで回転ビットマップを発行する
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
for (int i = 0; i < jumper.size(); i++) {
canvas.drawBitmap(jumper.get(i).getGraphic(), jumper.get(i)
.getCoordinates().getX(), jumper.get(i).getCoordinates()
.getY(), null);
}
}
私は、ユーザーが特定のビットマップ(多くの1)を選択し、ユーザーは画面上で指をドラッグしている間、ビットマップが回転することを持っていしようとしています。ここに回転コードがあります。今のところ、画面中央付近の任意の位置にあるデフォルトのアンドロイドアイコン(72x72px)を使用しています。
private void rotateJumper(int direction) {
Matrix matrix = new Matrix();
Bitmap source = jumper.get(selectedJumperPos).getGraphic();
matrix.postRotate(direction, source.getWidth()/2,
source.getHeight()/2);
int x = 0;
int y = 0;
int width = 72;
int height = 72;
Bitmap tempBitmap = Bitmap.createBitmap(source, x, y, width, height,
matrix, true);
jumper.get(selectedJumperPos).setGraphic(tempBitmap);
}
整数の方向は、指のドラッグの方向によって+1または-1のいずれかです。したがって、MotionEvent.ACTION_MOVEイベントごとにイメージが1度回転するはずです。ここで
問題となっている。
- 画像は画像中心の周りを回転しません。 CW回転は、左下隅を中心にしています。 CCWの回転は、右上隅を中心にしています。
- 中心を中心に回転していないため、画像は初期範囲外に回転し、最終的には消えます。
- 画像が回転するとぼやけます。
私に教えていただけたら助かります。
ありがとうございます!
これは機能しました。かなり大きな再設計をしましたが、うまくいきました。ありがとう! – phoenixfire53
@ FunKTheMonk、あなたのコードを説明してください。 – Manikandan
回転が発生するたびに新しいビットマップを作成するのではなく、マトリックスは保持され、レンダリング中に使用されます。 rotateJumperでは、必要な場合にのみ行列を初期化し、それをビットマップの中心の周りに回転させます。ビットマップを描画するときには、onDrawメソッドのマトリックスを使用します。マトリックスには、キャンバスに描画する場所(翻訳)、描く大きさ(回転)、回転などのデータが含まれます。 – FunkTheMonk