多くの場合、ViewPropertyAnimatorを使用し、次のようなwithEndAction()関数を使用して終了アクションを設定します。
view.animate().translationY(0).withEndAction(new Runnable() {
@Override
public void run() {
// do something
}
}).start();
ただし、次のような特別なリスナーを設定する終了アクションを設定することもできます。
view.animate().translationY(0).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// do something
}
});
では、これら2つのアプローチの違いと、それぞれをいつ使用する必要があるのでしょうか。
大きな違いはありません。 ソースコード を見てください。
どちらもonAnimationEnd
で実行されます。
ただし、ランナブルは開始後に削除されます。したがって、Runnableは1回だけ実行され、リスナーは複数回呼び出される可能性があります。
@Override
public void onAnimationEnd(Animator animation) {
mView.setHasTransientState(false);
if (mListener != null) {
mListener.onAnimationEnd(animation); // this is your listener
}
if (mAnimatorOnEndMap != null) {
Runnable r = mAnimatorOnEndMap.get(animation); // this is your runnable
if (r != null) {
r.run();
}
mAnimatorOnEndMap.remove(animation);
}
if (mAnimatorCleanupMap != null) {
Runnable r = mAnimatorCleanupMap.get(animation);
if (r != null) {
r.run();
}
mAnimatorCleanupMap.remove(animation);
}
mAnimatorMap.remove(animation);
}