开发中遇到多重嵌套的recyclerview中的item要播放语音,要求对小喇叭做一个图标切换的补间动画。
废话不多说了直接上代码:
mFirstVoicePlayItem//第一级列表的喇叭动画初始位置
mSecondVoicePlayItem//第二级列表的喇叭动画初始位置
position//当前列表的位置
iconPlayIV//喇叭显示控件
mSecondVoicePlayItem = -1;
if (mAnimationDrawable != null) {
mAnimationDrawable.stop();
mAnimationDrawable.selectDrawable(0);
mAnimationDrawable = null;
if (mFirstVoicePlayItem != position) {
mFirstVoicePlayItem = position;
iconPlayIV.setImageResource(R.drawable.icon_play_animation);
mAnimationDrawable = (AnimationDrawable) iconPlayIV.getDrawable();
mAnimationDrawable.start();
}
} else {
mFirstVoicePlayItem = position;
iconPlayIV.setImageResource(R.drawable.icon_play_animation);
mAnimationDrawable = (AnimationDrawable) iconPlayIV.getDrawable();
mAnimationDrawable.start();
}
这里不上全部代码,因为这一类的AnimationDrawable动画效果加载的资源很小,不同于我上一篇转载文章针对于大的资源动画出现的问题,不需要Handler。这里主要的代码很简单,但是逻辑要理清,因为多重的嵌套item的位置positon是可重复的,所以要给最外层的recyclerview的item设置一直标识,不同的recyclerview点击事件都要先去把其他的recyclerview的item标识重置掉,避免不同列表的item点击需要点击2下动画播放问题。思路是这个动画开始结束都在控件触发事件是进行,同时用MediaPlayer播放,在MediaPlayer播放的监听中都要处理好关于这个动画的关闭。