Как и в названии, я хочу сделать вращающийся диск, который будет вращаться, когда я нажму игру на медиаплеере. Вот код для моего ImageView (сейчас он движется onTouch):Как подключить вращающийся ImageView к MediaPlayer, чтобы он вращался, когда MediaPlayer играет в android
public class DjDiscsHandler {
public static double mCurrAngle = 0;
public static double mPrevAngle = 0;
public static void Discs(final ImageView djDisc, final String side) {
djDisc.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final float xc = djDisc.getWidth()/2;
final float yc = djDisc.getHeight()/2;
final float x = event.getX();
final float y = event.getY();
switch(side) {
case "left":
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
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));
Log.i("Current Angle", "" + mCurrAngle);
animate(mPrevAngle, mCurrAngle, 0, djDisc);
break;
}
case MotionEvent.ACTION_UP: {
mPrevAngle = mCurrAngle = 0;
break;
}
}
break;
case "right":
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
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, djDisc);
break;
}
case MotionEvent.ACTION_UP: {
mPrevAngle = mCurrAngle = 0;
break;
}
}
break;
}
return true;
}
});
}
public static void animate(double fromDegrees, double toDegrees, long durationMillis, final ImageView djDiscLeft) {
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);
djDiscLeft.startAnimation(rotate);
}
}
Я нашел код для этого здесь: How can i use RotateAnimation to rotate a circle?
Теперь я хочу, чтобы добавить его в мой mediaplyer обработчик:
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Deck.mediaplayerReadyLeft) {
Deck.mediaplayerLeft.start();
double mCurrAngle = 0;
while(Deck.mediaplayerLeft.isPlaying()) {
DjDiscsHandler.animate(mCurrAngle, mCurrAngle + 1, 0, Deck.djDiscLeft);
mCurrAngle++;
}
}
}
});
К сожалению, программа замерзает, когда я нажимаю кнопку воспроизведения и раздавливает несколько мгновений спустя.
Любые предложения?
Это действительно помогло! Большое спасибо! –
Нет проблем. Рад помочь! – NoChinDeluxe
Есть ли способ остановить анимацию, не очистив ее? Когда я его очищу, ImageView вернется в исходное положение, и я бы хотел, чтобы он оставался таким, каким он остановился. –