次のコードで回転するビットマップがあります。問題は、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);
}