我有一个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
),如果这对问题至关重要。
您可以向列表项添加其他属性,并检查动画何时以及何时不:
@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));
}
}