0

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 アプローチを好むのを見たように、試してみましたがうまくいきませんでした。

4

1 に答える 1