我这样设置动画:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Animation anim = AnimationUtils.loadAnimation(context, R.anim.rotate);
holder.windPropellers.setAnimation(anim);
break;
}
当视图滚出屏幕时,动画停止。当你向后滚动时,它根本没有动画。
需要在视图中设置瞬态,以防止其被回收。
您的代码将如下所示:
@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;
}
我使用了带有自定义图像/可绘制的
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>
就我而言,我需要显示和隐藏视图持有者内部的进度条,有时进度条没有显示。我关注@jonathanrz并使用
setHasTransientState(true)
答案并且它有效,但它使我的RecyclerView非常延迟和缓慢。所以我最终得到以下解决方案:
progressBar.post {
// Change visibility here
progressBar.visibility = GONE
}