2011-09-30 14 views
74

ビュー内にあるフェードアウトアニメーション(フラグメント内にあります)が発生し、アニメーションが発生するたびに、ビューが再描画されます。 view.SetVisibility(View.GONE)の作業を見つけました。しかし、アニメーションが終了するのを待つことはありません。このsetVisibilityコードをアニメーションが終了した後に実行したいと思います。それをする最善の方法は何ですか?アニメーションイベントの終了android

+0

あなたが表示されているどのようにあなたのコードを投稿アニメーション.... –

答えて

139

あなたはまた、単にあなたのアニメーションオブジェクトを取ると、それにアニメーションリスナーを追加Animation.setFillAfter

+4

アニメーションの進行中にフェードアウトアニメーションが再び開始されないようにするには、 'if(!anim.hasStarted()|| anim.hasEnded())'を使用して、アニメーションが静止しているかどうかを検出しますランニング。 – theczechsensation

8

のようなあなたのアニメーションオブジェクトにアニメーションのリスナーを追加することができます。ここで はサンプルコードです:受け入れ答えとしてではなく、はるかに簡潔な方法で

rotateAnimation.setAnimationListener(new AnimationListener() { 

      @Override 
      public void onAnimationStart(Animation animation) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       // TODO Auto-generated method stub 

**// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION** 


      } 
     }); 
+0

私は前にこれを解決するためにこれを使用しました。 –

8

を使用してこれを達成することができます

anim.setAnimationListener(new Animation.AnimationListener(){ 
    @Override 
    public void onAnimationStart(Animation arg0) { 
    }   
    @Override 
    public void onAnimationRepeat(Animation arg0) { 
    }   
    @Override 
    public void onAnimationEnd(Animation arg0) { 
    } 
}); 
15

機能的には同じ:

      /* Add/Remove any animation parameter */ 
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() { 
    @Override 
     public void run() { 
      theView.setVisibility(View.GONE); 
     } 
    }); 

は、お楽しみください:)

+1

クリアと1ライナー。トップの答え!ラムダ '.withEndAction(() - > theView.setVisibility(View.GONE)); ' – theBugger

+0

をカスタムアニメーションでこの方法で使うだけで簡単にできます...ありがとうbro –

+2

これはAPIレベル16です4.1)およびそれ以上。 – Tommie

関連する問題