RecyclerView (行自体ではなく、テキストを展開することを想像してください) の行内でいくつかのアニメーションを実行しており、そのアニメーションが含まれていない他のリサイクルされたビューにアニメーションが漏れる場合があります。
私はプロパティ アニメーションを使用しているので、スケール アクションは内側のビューのサイズを変更し、リークは 2 つの側面で確認できます。そのため、リサイクルされたビューに反映されます。
ビューを元の状態にリセットするにはどうすればよいですか? 投稿から多くのアプローチを試しましたが、解決するものはありませんでした。私が得た最も近い定義は、この未回答の投稿でした: How to reset view to original state after using animators to animates its some properties?
これは、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 アプローチを好むのを見たように、試してみましたがうまくいきませんでした。