У меня есть массив ImageView, который ImageViews будет масштабироваться друг другом. Теперь я хочу воспроизвести короткий звук дина (продолжительность меньше минуты) на onAnimationStart анимации в цикле.soundPool не играет внутри цикла at onAnimationStart
Все работает правильно , но звук воспроизводится только для первого.
public void AnimationAtEnd() {
for (ck = 0; ck < totalCount; ck++) {
ScaleAnimation scale = new ScaleAnimation(0f, 1.6f,0f,1.6f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scale.setInterpolator(new LinearInterpolator());
scale.setStartOffset(ck * 600);
scale.setDuration(600);
scale.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
mySoundPool.play(2, 1, 1, 1, 0, 1);
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
images_cen[ck].startAnimation(scale);
}
}
}
и вот как я определить Soundpool и нагрузки звуков.
mySoundPool = new SoundPool(
3,
AudioManager.STREAM_MUSIC,
0
);
mySoundPool.load(this, R.raw.circuit, 1);
mySoundPool.load(this, R.raw.ding, 1);
mySoundPool.load(this, R.raw.block, 1);
Как я могу это сделать ??? или В чем проблема ???
PS1:
OK я добавить soundPool.play()
к onAnimationEnd
и работать нормально. Таким образом, нет ничего плохого в soundPool. Я думаю, что это из анимационных сторон
ok. Я добавляю soundPool.play на onAnimationEnd, и все работает нормально !!! есть ли разница между структурой onAnimationStart и onAnimationEnd? – behrooz
Я не знаю, связано ли это с вашей проблемой, но есть ли причина, по которой вы выбрасываете «soundID», возвращаемые «SoundPool.load», а затем используя твердое значение 2 в качестве «soundID» в вашей 'play()' call? –
@MattGibson Вы правы. Правильный способ - это ваше предложение, но есть только 3 :) было проще для hardcoding вместо использования звукового идентификатора! Спасибо – behrooz