RecyclerView添加项目动画

时间:2015-09-28 03:06:51

标签: android animation android-recyclerview

我目前正在为RecyclerView项目添加收入动画。我希望它只是喜欢Google+ Android应用程序。这是我的代码片段:

动画/ up_from_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="@android:anim/decelerate_interpolator">

    <translate
        android:fromXDelta="0%" android:toXDelta="0%"
        android:fromYDelta="60%" android:toYDelta="0%"
        android:duration="500" />
</set>

在Adapter类中,我在函数startAnimation(itemHolder.itemView, position);

中添加函数onBindViewHolder
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    ...
    startAnimation(holder.rootView, position);
}

startAnimation()是这样的:

protected void startAnimation(View view, int position) {
    if (position > lastPosition) {
        Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.up_from_bottom);
        view.startAnimation(animation);
        lastPosition = position;
    }
}

它似乎看起来像Google+ Android应用程序的列表动画,但它有一个错误,当我快速滚动时,它动画不完美,例如似乎第一个位置和当前位置执行动画在同时。

我只想要像Google+这样的动画,我该如何修复它,或者还有其他任何方式。

我hava尝试recyclerview-animators,它是一个很棒的lib,但我仍然按照自己的意愿行事。

请帮忙!谢谢!

1 个答案:

答案 0 :(得分:4)

当您快速滚动时会出现“错误”,因为当视图滚动显示器时,视图上的动画仍在运行,并且当recyclerview回收它时,您正在将新动画绑定到视图。

您应该覆盖onViewDetachedFromWindow并清除方法中视图上的动画。

这将确保在视图上运行的任何动画在被发送到回收器以便重新使用之前将被清除,并且您可以安全地在视图上运行新动画。