1

私のアプリケーションでは、いくつかの画像があり、その画像をタップすると、90度回転するはずです。画像を1回回転させることはできますが、2回目のタップで回転させることはできません。誰かが私がこの問題を解決するのを手伝ってくれる?タッチイベントごとに画像を回転させるにはどうすればよいですか?

if (event.getAction() == MotionEvent.ACTION_DOWN) {
    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.quartercircle1);
        Matrix m = new Matrix();
        imgvwQrtr1.setScaleType(ScaleType.MATRIX);

        m.setRotate(90f, imgvwQrtr1.getDrawable().getBounds().width()/2, imgvwQrtr1.getDrawable().getBounds().height()/2);
        bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);
        imgvwQrtr1.setImageBitmap(bm);


        ClipData data = ClipData.newPlainText("", "");
        DragShadowBuilder shadowBuilder = new DragShadowBuilder(v);
        v.startDrag(data, shadowBuilder, v, 0);
        return true;
    }
4

2 に答える 2

1

次のようなグローバル変数を作成する必要があります。

int degree = 0;

そしてコードで

.....
//shortest way
degree = degree + 90;
if(degree % 360 == 0) {
   degree = 0;
}
//if(degree >= 270) {
   //degree = 0;
//} else {
   //degree+=90;
//}
m.setRotate(degree, imgvwQrtr1.getDrawable().getBounds().width()/2,
imgvwQrtr1.getDrawable().getBounds().height()/2);
....
于 2013-01-23T13:37:04.097 に答える
0

これを試して

    public static float getRotationAngle(final float x1, final float y1, final float x2, final float y2) {
                final float CLOCK_WISE = 1.0f;
                final float ANTI_CLOCK_WISE = -1.0f;

                final float deltaX = Math.abs(x2 - x1);
                final float deltaY = Math.abs(y2 - y1);

                if (deltaX == 0) {
                        return 0.0f;
                }

                final float angle = (float) Math.toDegrees(Math.atan(deltaY / deltaX));

                if (x1 <= x2 && y2 <= y1) {
                        return CLOCK_WISE * (90.0f - angle);
                } else if (x2 <= x1 && y2 <= y1) {
                        return ANTI_CLOCK_WISE * (90.0f - angle);
                } else if (x2 <= x1 && y1 <= y2) {
                        return ANTI_CLOCK_WISE * (90.0f + angle);
                } else if (x1 <= x2 && y1 <= y2) {
                        return CLOCK_WISE * (90.0f + angle);
                } else {
                        return 0.0f;
                }
        }
于 2013-01-23T13:37:53.940 に答える