1

次のコードで回転するビットマップがあります。問題は、rotate.setDuration をセットアップすることです。値を 900000 まで変更しようとしましたが、ACTION_UP ビットマップが常に同じ速度で開始位置まで回転します。

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            mCircle.clearAnimation();
            angleDegree = Math.toDegrees(Math.atan2(x - xc, yc - y));
            if (angleDegree>0){angleDegree=angleDegree-360;}
            angleDifference =angleDegree;      
            mCurrAngle =angleDegree-angleDifference;
            mPrevAngle = mCurrAngle;
            break;
        }
        case MotionEvent.ACTION_MOVE: {
            angleDegree = Math.toDegrees(Math.atan2(x - xc, yc - y));
            if (angleDegree>0){angleDegree=angleDegree-360;}
            mCurrAngle =angleDegree-angleDifference;
            mPrevAngle = mCurrAngle;
            animate(mPrevAngle, mCurrAngle, 0);
            break;
        }
        case MotionEvent.ACTION_UP : {
            timeback = 9000000;
            mPrevAngle = mCurrAngle = 0;
            animate(mPrevAngle, mCurrAngle, timeback);
            break;
        }
        }

    private void animate(double fromDegrees, double toDegrees, long setDuration) {
        final RotateAnimation rotate = new RotateAnimation((float) fromDegrees, (float) toDegrees,
                RotateAnimation.RELATIVE_TO_SELF, 0.5f,
                RotateAnimation.RELATIVE_TO_SELF, 0.5f);
        rotate.setDuration(setDuration);
        rotate.setFillEnabled(true);
        rotate.setFillAfter(true);
        mCircle.startAnimation(rotate);
}
4

0 に答える 0