为什么“ItemAnimator”不能正常工作,尽管在外观上一切似乎都有效

问题描述 投票:0回答:0

我创建了一个聊天应用程序,我已经学到了很多东西,我遇到了一个问题 -

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));
    }

确实有效,但我不认为这种方式是正确的。

java android android-recyclerview android-animation
© www.soinside.com 2019 - 2024. All rights reserved.