5

Path オブジェクトの操作方法、特に回転に関するドキュメントはほとんど見つかりません。

「元に戻す」機能を取り入れようとしているペイント アプリがあります。ユーザーの指が離されるまでビューに触れるたびに、指のパスが ArrayListにPathとして保存されます。undo メソッドは次のようになります。

        public void undo() {
            //If nothing was drawn, do nothing
            int size = path_history.size();
            if (size == 0)
                return;
            
            //Draw the last saved bitmap
            setupView();
            
            //Loop through saved paths, don't paint last path - remove it
            for (int i=0; i<size-1; i++)
                canvas.drawPath(path_history.get(i), paint);
            path_history.remove(size-1);
            invalidate();
        }

問題は、90度の角度で回転したビットマップを再描画するため、画面が回転した後にこれが機能しないことです(ユーザーに関する限り、描画は決して回転しません)。ビューが元の方向にあるかのようにパスが再描画されるため、パスと元のビットマップは同期しなくなります。

補償するために、私は試しました:

Matrix m = new Matrix();
m.preRotate(90);
//I TRIED THIS TOO: m.preRotate(90, bitmap width / 2, bitmap height / 2);
for (int i=0; i<size-1; i++)
    path_history.get(i).transform(m);

上記の回転は非常に悪く、パスは画面に再描画されません。コメントアウトされた回転を使用すると、少なくとも画面には表示されますが、まだ遠くに表示されます。ビットマップが回転するのと同じ方法でパスを回転するにはどうすればよいですか? 問題の一部は、最初にどの座標を回転させているのかわからないことだと考えています。それに関するドキュメントは見つかりませんでした。

ありがとうございました!

マット。

4

0 に答える 0