web-dev-qa-db-ja.com

複数のViewPropertyAnimatorを同時に開始します

Animatorクラスを使用すると、次のようなものを呼び出すだけで、複数のアニメーションを同時に再生できます。

AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(animatorsArray);
animatorSet.start();

しかし、ViewPropertyAnimatorで機能する同様のものは見つかりません。

(参考までに、複数のlistViewアイテムをアニメーション化しようとしています)

22
Jakob

質問が1年以上前のものであることは知っていますが、同じことが必要であり、解決策を思いついたので、それを共有することにしました。

ObjectAnimatorを使用するのとほぼ同じ方法で使用できるViewPropertyAnimatorラッパーを作成しました。それでも、ObjectAnimatorオブジェクトを使用して、AnimatorSetを記述できます。

ラッパーが利用可能です ここ

例(mTestViewに同じパラメーターのアニメーションを設定する):

  1. ViewPropertyAnimator
_mTestView.animate().withLayer().alphaBy(0.3f).rotationX(27);
_
  1. ViewPropertyObjectAnimator (私のラッパー)
_ObjectAnimator objectAnimator = 
    ViewPropertyObjectAnimator.animate(mTestView).withLayer().alphaBy(0.3f).rotationX(27).get();
_

ObjectAnimatorがあり、これはstart()するか、AnimatorSet内で使用できます。

13
Bartek Lipinski

上で述べたように、withStartActionを使用することをお勧めします。

ViewPropertyAnimator ページのAndroid docs)をさらに読むと

public ViewPropertyAnimator withStartAction(Runnable runnable)APIレベル16で追加されました

次のアニメーションの実行時に実行するアクションを指定します。このViewPropertyAnimatorにstartDelayが設定されている場合、実際のアニメーションが開始されるときに、startDelayの期限が切れた後にアクションが実行されます。このメソッドは、withEndAction(Runnable)とともに、アプリケーション内の他のアニメーションまたはアクションとのViewPropertyAnimatorアニメーションの振り付けを容易にすることを目的としています。

私はこれを自分で使用しようとしていますが、機能しているようです。

すべてのアニメーションコードをRunnableに追加し、複数のRunnableをArrayListに追加し、準備ができたら、ArrayListをループして、それらすべてでrun()を呼び出しました。

4
Russ Wheeler