我创建了一个聊天应用程序,我已经学到了很多东西,我遇到了一个问题 -
RecyclerView
中元素的动画。我使用 ItemAnimator
来捕捉新元素出现的时刻,然后将其动画化。我成功了,一开始消息是动画的,但在 1-2 条消息之后动画不起作用,甚至动画本身也不起作用,但是方法本身带有ItemAnimator
.
这是动画课:
public class MessageAnimator extends DefaultItemAnimator {
public MessageAnimator(Context context) {
addMessageAnimation = AnimationUtils.loadAnimation(context, R.anim.message_add_animation);
}
private final Animation addMessageAnimation;
@Override
public boolean animateAdd(RecyclerView.ViewHolder holder) {
holder.itemView.startAnimation(addMessageAnimation);
return true;
}
}
用于添加元素的方法:
public void addMessage(Message message) {
messages.add(message);
notifyItemInserted(messages.size() - 1);
}
我尝试不通过
ItemAnimator
而是立即在onBindViewHolder
中运行动画:
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
Message message = messages.get(position);
switch(Message.MessageType.getById(holder.getItemViewType())) {
case USER:
if(holder instanceof UserMessageHolder) ((UserMessageHolder) holder).sendValues(message);
break;
case BOT:
if(holder instanceof BotMessageHolder) ((BotMessageHolder) holder).sendValues(message);
break;
}
holder.itemView.startAnimation(AnimationUtils.loadAnimation(holder.itemView.getContext(), R.anim.message_add_animation));
}
确实有效,但我不认为这种方式是正确的。