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

问题描述 投票:0回答:3

我这样设置动画:

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

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

android animation scroll android-recyclerview
3个回答
14
投票

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

您的代码将如下所示:

@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;

}


2
投票

我使用了带有自定义图像/可绘制的

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" />

和可绘制的

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>

0
投票

就我而言,我需要显示和隐藏视图持有者内部的进度条,有时进度条没有显示。我关注@jonathanrz并使用

setHasTransientState(true)
答案并且它有效,但它使我的RecyclerView非常延迟和缓慢。所以我最终得到以下解决方案:

progressBar.post {
            // Change visibility here
            progressBar.visibility = GONE
        }
© www.soinside.com 2019 - 2024. All rights reserved.