Android RecyclerView如何仅为项目设置动画一次?

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

我有一个RecyclerViewAdapter,当它们第一次出现在屏幕上时(即向下滚动时)我需要这些项目,但是只有一次,它们第一次出现,之后每当用户向上滚动时,它都不应该是动画。

我的代码现在可以完美地工作,除了最后一项,当我向下滚动它时它总是一遍又一遍地动画。

private Integer lastPosition = -1;

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {

    holder.setIsRecyclable(false);

    // Animations
    // If the bound view wasn't previously displayed on screen, it's animated
    if (position > lastPosition) {
        holder.mImage.setAnimation(AnimationUtils.loadAnimation(context, R.anim.first_animation));
        holder.mView.setAnimation(AnimationUtils.loadAnimation(context, R.anim.second_animation));

        lastPosition = position -1;
    }
}

如果我设置lastPosition = position;我只会加载前几个项目(并且可见,取决于屏幕大小)动画,当我向下滚动时,它们不会得到任何动画。

为什么会这样?正如此处的所有示例所示,首次使用它们滚动动画项目

lastPosition = position;

但我的失败了?

我的RecyclerAdapter是可过滤的(implements Filterable),如果这对问题至关重要。

android android-recyclerview android-animation recycler-adapter listitem
1个回答
0
投票

您可以向列表项添加其他属性,并检查动画何时以及何时不:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {

    //Checking if has already animated
    if (!list.get(position).hasAnimated()) {

        //Mark this ViewHolder as animated
        list.get(position).setHasAnimated();
        holder.mImage.setAnimation(AnimationUtils.loadAnimation(context, R.anim.first_animation));
        holder.mView.setAnimation(AnimationUtils.loadAnimation(context, R.anim.second_animation));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.