如何使用RotateAnimation旋转了一圈? [英] How can i use RotateAnimation to rotate a circle?
问题描述
我希望我的圈子图像(ImageView的)旋转作为用户触摸和拖拽。如果用户拖动到右边,它应该旋转正确,反之亦然。当你旋转一个DJ盘,如果你知道我的意思是像。我打了一下周围有OnTouchListener和RotateAnimation但我越来越行不通。
I want my circle image (ImageView) to rotate as the user touch and drag it. If the user drags it to the right, it should spin right and vice versa. Like when you spin a DJ disc, if you know what i mean. I've played around a bit with OnTouchListener and RotateAnimation but i'm getting nowhere.
任何想法?
推荐答案
让我们假设你有 ImageView的mCircle
要旋转。你必须使用 RotateAnimation
旋转。在 OnTouch
方法确定角度,其中用户的手指。
Let's assume you have ImageView mCircle
which you want to rotate. You have to use RotateAnimation
to rotate it. In OnTouch
method determine the angle where user's finger is.
例如,在您的主要活动做了以下
For example, in your main activity do the following
private ImageView mCircle;
private double mCurrAngle = 0;
private double mPrevAngle = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mCircle = (ImageView) findViewById(R.id.circle);
mCircle.setOnTouchListener(this); // Your activity should implement OnTouchListener
}
@Override
public boolean onTouch(View v, MotionEvent event) {
final float xc = mCircle.getWidth() / 2;
final float yc = mCircle.getHeight() / 2;
final float x = event.getX();
final float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
mCircle.clearAnimation();
mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y));
break;
}
case MotionEvent.ACTION_MOVE: {
mPrevAngle = mCurrAngle;
mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y));
animate(mPrevAngle, mCurrAngle, 0);
break;
}
case MotionEvent.ACTION_UP : {
mPrevAngle = mCurrAngle = 0;
break;
}
}
return true;
}
private void animate(double fromDegrees, double toDegrees, long durationMillis) {
final RotateAnimation rotate = new RotateAnimation((float) fromDegrees, (float) toDegrees,
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
RotateAnimation.RELATIVE_TO_SELF, 0.5f);
rotate.setDuration(durationMillis);
rotate.setFillEnabled(true);
rotate.setFillAfter(true);
mCircle.startAnimation(rotate);
}
这篇关于如何使用RotateAnimation旋转了一圈?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!