如何在Google plus/Google报摊上滚动回收视图?

T_C*_*T_C 34 android scroll android-animation android-recyclerview

我如何设置RecyclerView第一次显示项目的时间以及用户滚动时的动画,就像它对google plus应用程序或google新闻站点应用程序的工作方式一样.

我还读到RecyclerView了用户滚动时不直接支持动画的地方; 如果这是真的,我们还有什么方法可以做到吗?

Vin*_*kar 78

我是这样做的.可以帮助别人.我不知道这是否是最好的方式,但对我来说效果很好.

更新: 要修复快速滚动行为,请覆盖onViewDetachedFromWindow适配器的方法并调用clearAnimation动画视图(在本例中holder.itemView.clearAnimation()).类似于:

 @Override
public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
    super.onViewDetachedFromWindow(holder);
    holder.itemView.clearAnimation();
}
Run Code Online (Sandbox Code Playgroud)

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="100%" android:toYDelta="0%"
    android:duration="400" />
</set>
Run Code Online (Sandbox Code Playgroud)

down_from_top.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="-100%" android:toYDelta="0%"
    android:duration="400" />
</set>
Run Code Online (Sandbox Code Playgroud)

最后把这段代码放进去onBindViewHolderrecyclerView.创建一个名为lastPosition的字段并将其初始化为-1.

Animation animation = AnimationUtils.loadAnimation(context,
            (position > lastPosition) ? R.anim.up_from_bottom
                    : R.anim.down_from_top);
    holder.itemView.startAnimation(animation);
    lastPosition = position;
Run Code Online (Sandbox Code Playgroud)

  • 要修复快速滚动行为,在适配器上实现`onViewDetachedFromWindow`并在动画视图上调用`clearAnimation`(在你的情况下,`holder.itemView`). (13认同)