当前结果:按下img按钮时,它将播放声音文件,但不进行动画处理。
期望的结果:按下img按钮时,它将播放声音文件并进行动画处理,当声音文件完成播放后,动画将停止。
问题:我正在尝试为此编写逻辑,并且我的日志语句告诉我它应该工作,因为我看到了“动画开始”和“动画停止”。奇怪的是,我的img按钮在按下时会更改颜色,这很好,但是在声音文件完成之前,它将保持该颜色,就好像它一直处于按下状态,直到声音结束为止。我完全错过了什么吗?有任何想法吗?
StartActivity;
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());
}
});
关于android - Android动画无法正常运行-无法播放,希望在声音文件停止播放时停止播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674785/