2017-08-11 14 views
0

RecyclerViewの行の内部でアニメーションを実行しています(行自体ではなく、テキストを拡大すると想像してください)。それらのアニメーションを持っていない。リサイクラービューで使用するProperty Animatorの値をリセットしようとしています

私は、プロパティのアニメーションを使用しているので、スケールのアクションは、内側のビューのサイズを変更し、漏れが2面で見ることができます。 1)アニメーションが表示がされている(これは私はいくつかの警備員を克服することができ) 2)に移動しますリサイズされ、そのトラックで停止するので、リサイクルされたビューに反映されます。

ビューを元の状態にリセットするにはどうすればよいですか?私はポストから多くのアプローチを試みたが、誰もそれを解決しなかった。ここでHow to reset view to original state after using animators to animates its some properties?

私は(この1つは私は1件の記事で見つかりましたが、うまくいきませんでしたonAnimationEndを使用しようとする試みを持っている)[OnBind]の中で、私のアニメーションを設定する方法のサンプルがある:私が得た最も近いの定義は、この未回答のポストにありました

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のアプローチのような多くの人を見たように - しようと、どちらか動作しませんでした。

答えて

1

4日と1つの応答ではなく、私はそれを自分で解決しました。 アプローチが近かったので、間違って配置されました。

私は、このメソッドを追加しました:

private void stopAnimation() { 
    for (Animator anim : mTotalAnimation.getChildAnimations()) { 
     ((ObjectAnimator) anim).reverse(); 
     anim.end(); 
    } 
} 

を、私はビューをリセットしたいとき、私はそれを呼び出します。

ここでは、AnimatorSetからアニメーションを取得し、それぞれを反転して終了します。私は手動でそれをしなければならなかった理由を私は理解していなかったが、この能力は、Android Oに追加されるようだ: https://developer.android.com/preview/api-overview.html#aset

アンドロイドO、AnimatorSet APIで開始

は今、求めていると逆で遊んでサポートしています。 Seekingでは、アニメーションセットの位置を特定の時点に設定できます。逆順で再生すると、アプリに取り消すことができる操作のアニメーションが含まれている場合に便利です。 2つの別々のアニメーションセットを定義する代わりに、同じアニメーションセットを逆に再生できます。

+0

私は 'end()'は必要ではないと思います。 'reverse()'の効果を元に戻すようです。 また、値を直ちに元の状態にリセットするには、 'anim.reverse()'を呼び出す前に 'anim.setDuration(0)'が必要です。 'mTotalAnimation.setDuration(0)'を呼んでも効果がないことに気づきました。各子アニメーションで呼び出される必要がありました。 – owjsub

関連する問題