Android动画无法正常工作-无法播放,希望在声音文件停止时停止播放

Android动画无法正常工作-无法播放,希望在声音文件停止时停止播放,android,animation,audio,Android,Animation,Audio,当前结果:按下img按钮时,它会播放声音文件,但不会播放动画 理想结果:按下img按钮时,播放声音文件并制作动画,播放完声音文件后,动画停止 问题:我正在尝试为此编写逻辑,我的日志语句告诉我,当我看到动画开始和动画停止时,它应该可以工作。奇怪的是,我的img按钮在按下时会改变颜色,这很好,但在声音文件完成之前,它会一直保持这种颜色,就好像在声音完成之前它一直处于按下状态一样。我完全错过了什么吗?有什么想法吗 星触觉 imgButton.setOnClickListener(new View.On

当前结果:按下img按钮时,它会播放声音文件,但不会播放动画

理想结果:按下img按钮时,播放声音文件并制作动画,播放完声音文件后,动画停止

问题:我正在尝试为此编写逻辑,我的日志语句告诉我,当我看到动画开始和动画停止时,它应该可以工作。奇怪的是,我的img按钮在按下时会改变颜色,这很好,但在声音文件完成之前,它会一直保持这种颜色,就好像在声音完成之前它一直处于按下状态一样。我完全错过了什么吗?有什么想法吗

星触觉

imgButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                soundClassObject.setMP(getApplicationContext());
                soundClassObject.checkSound2(imgButton,animation1);
            }
        });
声音类

public void setMP(Context c){
        mp = MediaPlayer.create(c, returnRandomSound());
    }

public void checkSound2(View v, Animation a){
        v.startAnimation(a);
        mp.start();
        Log.i(TAG, "Animation start: " + v.getAnimation());
      while(v.getAnimation() != null) {
          stopAnimation(v);
      }
    }

public void stopAnimation(View v){
    if (!mp.isPlaying()){
        v.clearAnimation();
        Log.i(TAG, "Animation stopped: " + v.getAnimation());
    }
}
动画

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="100"
android:fromDegrees="-5"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:toDegrees="5" />

我最终在我的方法中添加了一个MediaPlayer侦听器-

            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                public void onCompletion(MediaPlayer mp) {
                    v.clearAnimation();
                    switch (v.getId()) {
                        case R.id.imgbutton1:
                            v.setBackgroundResource(R.drawable.boat);
                            break;
                        case R.id.imgbutton2:
                            v.setBackgroundResource(R.drawable.train);
                            break;
                        case R.id.imgbutton3:
                            v.setBackgroundResource(R.drawable.rocket);
                            break;
                    }
                    Log.i(TAG, "v animation clear: " + v.getAnimation());
                    Log.i(TAG, "Later mp: " + mp.getAudioSessionId());
                }

            });