项目中有个列表的item中有点赞动画,之前我用的列表框架是继承listview的,动画用起来一点问题都没有,现在列表框架是继承用的recyclerView,动画就卡主,百思不得其姐。
解决方法:
1.动画要放新线程中,最好加点延时操作。
2.我以为把1操作就解决问题,动画是能正常出来了,但测试来搞事情了,在动画出来的一瞬间,如果去滑动一下列表,动画有卡住了。
好了,接下来又的解决新的问题。
经过多次调试,发现动画onAnimationStart一定会执行,onAnimationEnd不执行。首先我是个显示隐藏动画。
然后我在想能在onAnimationStart做所有操作得了,结果验证还是可行的。
下面参考代码:
notifyDataSetChanged();
//需要在其他线程执行,最好加点延迟操作
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
btnLikeAnimation(animView);
}
}, 300);
/**
* +1动画
*
* @param plus_img
*/
private void btnLikeAnimation(final ImageView plus_img) {
plus_img.clearAnimation();
AnimationSet animationSet = new AnimationSet(true);
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 0, -150);
AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
animationSet.addAnimation(translateAnimation);
animationSet.addAnimation(alphaAnimation);
animationSet.setDuration(1200);
animationSet.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
plus_img.setVisibility(View.VISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
plus_img.setVisibility(View.GONE);
}
}, 1200);
}
@Override
public void onAnimationEnd(Animation animation) {
plus_img.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
plus_img.startAnimation(animationSet);
}
好像有点投机取巧做法,如果你们有发现有其他方法记得评论
注:上面方法还是有缺陷,因为notifyDataSetChanged()不确定是否300毫秒就刷新完成了,如果没有刷新完,还是会造成控件错乱。
最最终的解决方案是:先动画完成后再去adapter更新数据
比如:
public void onAnimationEnd(Animation animation) {
plus_img.setVisibility(View.GONE);
iView.setMoodLike(moodId, !moodLike);
}