我正在创建一个聊天应用程序,并且想要在向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()
。