Android开发RecyclerView刷新后item里面控件动画

项目中有个列表的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);

            }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值