当视图离开屏幕时,Android动画停止在recyclerview中工作

时间:2017-01-21 13:45:04

标签: android animation scroll android-recyclerview

我设置了这样的动画:

@Override
    public void onBindViewHolder(ViewHolder holder, int position) {     
            Animation anim = AnimationUtils.loadAnimation(context, R.anim.rotate);
            holder.windPropellers.setAnimation(anim);
            break;
}

当视图滚动时,屏幕动画停止。当你向后滚动时,它根本就没有动画效果。

2 个答案:

答案 0 :(得分:5)

您需要在视图中设置瞬态,以防止其被回收。

您的代码如下所示:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {     
        Animation anim = AnimationUtils.loadAnimation(context, R.anim.rotate);
        holder.windPropellers.setHasTransientState(true);
        anim.setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                holder.windPropellers.setHasTransientState(false);
            }
        });
        holder.windPropellers.setAnimation(anim);
        break;

}

答案 1 :(得分:0)

我使用带有自定义图片/可绘制图片的ProgressBar来代替,因为我无法获得其他答案来完美地工作。

根据需要在setVisibility(View.GONE/VISIBLE)中设置onBindViewHolder

<ProgressBar
    android:id="@+id/pbUpload"
    android:layout_width="52dp"
    android:layout_height="52dp"
    android:layout_gravity="center"
    android:indeterminate="true"
    android:indeterminateDrawable="@drawable/loader_rotate"
    android:indeterminateDuration="1000"
    android:visibility="gone" />

和Drawable loader_rotate.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:fromDegrees="0"
            android:toDegrees="360"
            android:pivotX="50%"
            android:pivotY="50%"
            android:drawable="@drawable/loader"> <!-- a png image in drawable folders -->
        </rotate>
    </item>
</layer-list>