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