当新视图添加到RecyclerView时,如何在RecyclerView项上保留正在进行的动画?

时间:2019-05-08 17:43:38

标签: android android-recyclerview android-animation

我正在创建一个聊天应用程序,并且想要在向recyclerView添加新消息时运行一些动画。

添加项目后,动画将开始并相应播放。但是,如果在上一个项目的动画结束之前将其他项目添加到recyclerView中,则正在进行的动画将停止并重新启动。

我希望动画异步继续,并且在添加新项目时不受影响。

 @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int position) {

        final Chat message = mMessageList.get(position);

        final long timeInterval = message.getTimeInterval();

        if(message.getSeen().equals(true)&&message.getReceiver().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())) {


            msg = message.getMessage();
            timeDelay = message.getTimeInterval();


                viewHolder.typeWriter.setText("");
                viewHolder.typeWriter.setCharacterDelay(75);

            viewHolder.typeWriter.animateText(message.getMessage());
                setFadeAnimation(relativeLayout, timeInterval);


        }

        else
        viewHolder.messageView.setText(message.getMessage());
        viewHolder.typeWriter.setText("");




    }
...
    public void setFadeAnimation(final View view, final long timeInterval) {
        AlphaAnimation anim = new AlphaAnimation(1.0f, 1.0f);

        anim.setDuration(timeInterval-1000);



        anim.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {


            }

            @Override
            public void onAnimationEnd(Animation animation) {
                animationProgress = false;

                AlphaAnimation animagain = new AlphaAnimation(1.0f,0.0f);
                animagain.setDuration(1000);
                view.startAnimation(animagain);


            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });


        view.startAnimation(anim);



    }

Typewriter类扩展了TextView类,并包含一个动画函数,以打字机动画的形式将字符串加载到textView中。

接收方收到新消息时,它将运行TypeWriter动画,该动画基本上一次将消息加载到视图中,模拟打字机动画。

收到消息后,动画将运行。但是,如果动画结束前收到另一条消息,则动画将停止并重新启动。

p.s。我没有在代码中的任何地方使用notifyDataSetChanged()

0 个答案:

没有答案