web-dev-qa-db-ja.com

アニメーションリスナーをアクティビティアニメーションに設定します

overridePendingTransitionメソッドを使用してカスタムアクティビティアニメーションを実行しています。

アニメーションがいつ終了するか知りたいです(コールバック/リスナー)。

これを達成する直接的な方法はありますか?そうでない場合は、回避策を提案してください。

20
akc

overridePendingTransitionにはリスナーがありません。以前の投稿を書いたように、overridePendingTransitionの代わりに通常のアニメーションを使用したい(つまり、Android 2.0以降)。

同様の効果を得ることができ、通常のアニメーションでよりクールなことを行うこともできます。ここでの私の以前の投稿: XMLをゆっくりロードする

8
Curtain

このメソッドを使用して、アニメーション(アニメーションXMLのresID)を開始します。 nextPuzzleOnEndがtrueの場合、アニメーションが終了したときにメソッド「nextPuzzle」が呼び出されます。

この方法は私のパズルアプリの一部であり、成功したアニメーションを表示するために使用し、その後(アニメーションが終了した後)次のパズルを続行します。

 /*
 * start animation (any view)
 */
 private void startAnimation(View v, int resId, Boolean nextPuzzleOnEnd){
    Animation anim;

    if(v!=null){    // can be null, after change of orientation
            anim = AnimationUtils.loadAnimation(this.getContext(),resId);
            anim.setFillAfter(false);
            v.setAnimation(anim);
            if( nextPuzzleOnEnd ){
                anim.setAnimationListener(new AnimationListener() {
                    public void onAnimationStart(Animation anim)
                    {
                    };
                    public void onAnimationRepeat(Animation anim)
                    {
                    };
                    public void onAnimationEnd(Animation anim)
                    {
                        nextPuzzle();
                    };
                });                     
            }
            v.startAnimation(anim);                 
    }
  }
13

この質問でGoogleを閲覧できなかった後、すべてのオーバーライド方法を実行して解決策を見つけました。

だから私がしたことは、画面に入っているアクティビティでこのメソッドをオーバーライドすることでした:

@Override
public void onEnterAnimationComplete() {
        super.onEnterAnimationComplete();
}
7
Hamburg is nice

@Hambugソリューションは素晴らしいです。しかし、問題があります。 onEnterAnimationCompleteは、Lollipop以降のAPI(21)で動作します。

@Override
public void onEnterAnimationComplete() {
    super.onEnterAnimationComplete();
    //write code here.
 }

上記のメソッドで記述したコードは、prelolipopデバイスでは実行されません。したがって、バージョンチェックを入れて、必要に応じて書き込む必要があります。 onCreateで。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop){
        //write code here.
    }
1
Nauman Ash