ズームとパンが可能で、コンパスの読みで回転する画像を表示しようとしています。以下のコードでは、3 つのアクションはすべて機能しますが、互いに影響を及ぼします。
私が達成したいことは次のとおり
です。 1.画面の中心を中心に回転します
2.画像の同じ部分を中央に残して拡大縮小し
ます 3.画像内の目的の場所にパンします
以下のコードで実際に何が起こっているかを次に示します
。 1. 回転は意図したとおりに機能し、画面の中心を中心に機能します
2. スケーリングは機能しますが、画像の中心を中心に
拡大縮小します
3. 平行移動angle
は がゼロの場合にのみ意図したとおりに機能し、それ以外の場合は機能しますそれは間違った方向に進んでいる
// the center of the view port
float centerX = screen.right/2;
float centerY = screen.bottom/2;
Matrix m = new Matrix();
m.preRotate(angle, centerX, centerY);
m.preScale(mScaleFactor, mScaleFactor, centerX, centerY);
// scaling the amount of translation,
// rotating the translation here gave crazy results
float x = mPosX / mScaleFactor;
float y = mPosY / mScaleFactor;
m.preTranslate(x, y);
canvas.drawBitmap(pic, m, null);
最初に移動し、後で回転すると、移動は意図したとおりに機能しますが、回転はビューポートの中心を中心としていません。
相互に影響を与えることなく、3 つの変換すべてを適用するにはどうすればよいでしょうか?