6

ここで何かが足りないかもしれませんが、何時間も立ち往生しています。ユーザーが絵の上に寸法線を描くアプリを作ります。次に、線が選択されていることを示すいくつかの選択ポイントもペイントします。これらのポイントは特定のビットマップであり、線の端(矢印の後)にあり、矢印に従って回転する必要があります。Viewを拡張するクラスDrawSelectionPointを作成しました。ビットマップは、次のように回転できます。

selectionPoint = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.selectionpoint);
Matrix matrix = new Matrix();
        matrix.postRotate((float)Math.toDegrees(angle));        
canvas.drawBitmap(selectionPoint, matrix, null);

(ここで、angleは線の角度です)このようにして、ビットマップは希望どおりに回転しますが、ポイント0,0(画面の左上)にペイントされます。

私が次のようなものを使用する場合

canvas.save();

canvas.rotate();

canvas.drawBitmap(selectionPoint, x, y, null);

canvas.restore(); 

次に、希望する正確な位置にビットマップを描画するのが難しすぎることに気付きます(回転したキャンバスに描画し、後で回転して戻すため)。ユークリッド回転変換をいくつか試しましたが、うまくいきませんでした。

行列の回転を適用し、ビットマップを描画する必要があるポイントを指定する方法はありますか?前もって感謝します!

4

1 に答える 1

21

ビットマップの中心が(px、py)キャンバス座標になる場所にビットマップを描画するとします。メンバー変数を持つ

Matrix matrix = new Matrix();

そしてあなたのonDrawで:

matrix.reset();
matrix.postTranslate(-bitmap.getWidth() / 2, -bitmap.getHeight() / 2); // Centers image
matrix.postRotate(angle);
matrix.postTranslate(px, py);
canvas.drawBitmap(bitmap, matrix, null);
于 2012-05-26T14:11:21.643 に答える