在recyclerview中逐项动画

时间:2017-07-10 15:12:25

标签: android animation android-recyclerview

我需要在RecyclerView中实现动画,它对每个项目都有一个上滑效果。我搜索过这个并尝试了很多不同的东西。滚动时它会起作用,但第一次加载页面时它不起作用。我已在此链接上传了一段视频。

我试过这段代码

@Override
public void onBindViewHolder(ViewHolderHelper holder, int position, List<Object> payloads) {
    super.onBindViewHolder(holder, position, payloads);
    setAnimation(holder.itemView, position);
}

private void setAnimation(View viewToAnimate, int position) {
    if (position > lastPosition) {
        Animation animation = AnimationUtils.loadAnimation(mcontext, R.anim.slide_in_bottom_list_item);
        animation.setInterpolator(new AccelerateInterpolator());
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }
}

也试过

  animation.setStartOffset(position * 100);

但缺少快速滚动的项目

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

在互联网上搜索后,我决定做一个hacky解决方案。

animation.setStartOffset(position * 100);

很多帖子都有这个建议。但是当你在recyclerview中快速滚动时,这会搞乱。

所以我决定对前几个可见项进行此偏移,然后动画正确地应用于其他行而没有偏移。

 @Override
    public void onBindViewHolder(ViewHolderHelper holder, int position, List<Object> payloads) {
        super.onBindViewHolder(holder, position, payloads);

        setAnimation(holder.itemView, position);
    }

    private void setAnimation(View viewToAnimate, int position)
    {
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(mcontext, R.anim.slide_in_bottom_list_item);
            animation.setInterpolator(new DecelerateInterpolator());
            if(position < 4)
                animation.setStartOffset(position * 200);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

希望这有助于某人。