2011-02-03 5 views
2

私のapkのサイドバーを表示したり非表示にするアニメーションを作成しています。しかし、イベントが発生すると、両方のアニメーションが実行されます。1つのビューでアニメーションを非表示/表示する場合は、両方とも発生する - Android

私のスイッチのアニメーションコードは

private boolean showingBar = true; 
private void switchSideBar() { 
     if (showingBar) { 
      sideBar.startAnimation(hideBar); 
      Toast.makeText(this, "Showing", Toast.LENGTH_SHORT).show(); 
      showingBar = false; 
     } else { 
      showingBar = true; 
      Toast.makeText(this, "Hiding", Toast.LENGTH_SHORT).show(); 
      sideBar.startAnimation(showBar); 
     } 
    } 

である私が起こっていただきました!見るために、これらのトーストを追加し、イベントが発生したときに一つだけのテキストがありましたさ。

アニメーションのコードは何が起こっている

表示バー

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="-50" android:toXDelta="0" 
    android:duration="300" /> 

hideBar

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0" android:toXDelta="-50" 
    android:duration="300" /> 

ということでしょうか?

答えて

2

なぜ、両方のアニメーションが実行されるのですか?あなたのトーストベースの分析から、アニメーションの1つだけが実行されるようです。

アニメーションが終了したときに要素が元の位置に戻るため、両方のアニメーションが実行されると言う場合は、アニメーションにfillAfter to trueを設定していないために起こっている可能性があります。開閉時にサイドバーの位置を変更するためのオプションとしてonAnimationEndを見ることもできます(したがって、永久にします)。

+0

本当に、これはあなたが言ったことです、ビューは元の位置に戻ります、これは混乱します。私はonAnimationEndメソッドを実行しましたが、今度はfillAfterについて見ていきます。タイ! –

+0

android:fillAfter = "true"は完全に機能します。 –

+1

あなたのアニメーションをお楽しみください! – goncalossilva

関連する問題