在 RecyclerView 的一行内做一些动画(不是行本身。想象一下扩展文本),有时动画会泄漏到其他不应该有动画的回收视图。
由于我使用属性动画,缩放动作调整了内部视图的大小,并且可以在两个方面看到泄漏:1)动画将继续(我可以通过一些守卫来克服)2)视图已调整大小并停止在其轨道上因此它将反映在循环视图中。
如何将视图重置为原始状态?我从帖子中尝试了许多方法,但没有一个解决它。我得到的最接近的定义是在这篇未回答的帖子中: 如何在使用动画师为其某些属性设置动画后将视图重置为原始状态?
这是我如何在 onBind 中设置动画的示例(这个尝试使用 onAnimationEnd ,我在一篇文章中找到但没有用)
ObjectAnimator scaleXUp = ObjectAnimator.ofFloat(mView, View.SCALE_X, 10f);
scaleXUp.setRepeatCount(ValueAnimator.INFINITE);
scaleXUp.setRepeatMode(ValueAnimator.REVERSE);
scaleXUp.setDuration(700);
ObjectAnimator scaleYUp = ObjectAnimator.ofFloat(mView, View.SCALE_Y, 10f);
scaleYUp.setRepeatCount(ValueAnimator.INFINITE);
scaleYUp.setRepeatMode(ValueAnimator.REVERSE);
scaleYUp.setDuration(700);
mTotalAnimation = new AnimatorSet();
mTotalAnimation.play(scaleXUp).with(scaleYUp);
mTotalAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
mTotalAnimation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
animation.removeListener(this);
animation.setDuration(0);
for(Animator va : ((AnimatorSet)animation).getChildAnimations()) {
((ValueAnimator)va).reverse();
}
}
});
mTotalAnimation.start();
这是我在 onUnbindData 中所做的:
if (mTotalAnimation != null) {
mTotalAnimation.end();
mTotalAnimation = null;
}
正如我看到很多人喜欢 clearAnimation 方法一样 - 尝试过但也没有奏效。