2つのアニメーションを「チェーン」しようとしているので、一方が完了すると、もう一方が始まります。これは、1つの問題を除いて機能しています。最初のアニメーションが完了すると、元の位置に戻ります。塗りつぶしをtrueに設定しています。他に何が欠けていますか?
これが私が使用しているコードです。これは、LinearLayoutを拡張しているクラスにあることに注意してください。
// FIRST ANIMATION
mAnimation = new TranslateAnimation(0, PANEL_END_X, 0, 0);
mAnimation.setDuration(PANEL_TRANSITION_TIME);
mAnimation.setFillAfter(true);
mAnimation.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationEnd(Animation animation) {
// FIRST ANIMATION COMPLETE, CALL THE SECOND ANIMATION
startAnimation(mAlphaAnimation);
}
});
// SECOND ANIMATION
mAlphaAnimation = new AlphaAnimation(1.0f, 0.0f);
mAlphaAnimation.setDuration(PANEL_ALPHA_TRANSITION_TIME);
mAlphaAnimation.setFillAfter(true);
解決:
これを満足のいくように機能させる唯一の方法は、を使用することでしたAnimationSet
が、2番目のアニメーションの開始オフセットを開始オフセット+最初のアニメーションの継続時間と少しのパディングに設定しました。私の場合、それらは完全に正確である必要はありませんでした。
CommonsWareが提案するようにさまざまな値で遊んでみましたが、新しい値を取得する前に値が元の値に戻るという、ある種の「スナップ」効果が常に得られました。