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

问题描述:

当前结果:当按下img按钮时,它会播放声音文件,但不会播放动画。Android动画无法正常工作 - 无法播放,希望当声音文件停止时停止播放

预期结果:当img按钮被按下时,它播放声音文件并进行动画,当声音文件播放结束时,动画停止。

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

StartActivity;

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

Sound Class;

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()); 
       } 

      });