Как сохранить текущую анимацию в элементе RecyclerView, когда в RecyclerView добавлено новое представление? - PullRequest
0 голосов
/ 08 мая 2019

Я создаю приложение чата и хочу запускать анимацию всякий раз, когда новое сообщение добавляется в 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, которая в основном загружает сообщения в представление по одному символу за раз, имитируя анимацию пишущей машинки.

Когда сообщение получено, анимация запускается.Но если другое сообщение получено до завершения анимации, анимация останавливается и перезапускается.

ps Я не использую notifyDataSetChanged() в любом месте кода.

...