アニメーションイベント終了Android


90

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


アニメーションの表示方法をコードに投稿してください...
Lalit Poptani '30

回答:


171

次のように、アニメーションリスナーをアニメーションオブジェクトに追加できます。

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

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

34

機能的には受け入れられた回答と同じですが、はるかに簡潔な方法です。

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

楽しい :)


2
クリアでワンライナー。トップ回答!ラムダを使用して単純化できます.withEndAction(() -> theView.setVisibility(View.GONE));
theBugger

2
これはAPIレベル16(4.1)以上であることを覚えておいてください。
Tommie、2016

すばらしい解決策、私の友人。ありがとうございました!
Vlad Ivchenko 2018年

重要な情報:-アクションはアニメーションが正常に終了した場合にのみ実行されます。そのアニメーション中にViewPropertyAnimatorがキャンセルされると、ランナブルは実行されません。
Sarthak_ssg5

ランナブルでナビゲーションコンポーネントを使用する場合にも、チャームのように機能します。(navコンポーネントでナビゲートしていると、アニメーションリスナーが常にクラッシュしました。)
Luigi_Papardelle


9

単にアニメーションオブジェクトを取り、それにアニメーションリスナーを追加します。次にコード例を示します。

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**


            }
        });

1

Kotlinの例

var fadeOutImage = findViewById<ImageView>(R.id.fade_out_Image)
    val fadeOutAnimation = R.anim.fade_out_animation
    val animation = AnimationUtils.loadAnimation(this, fadeOutAnimation)
    fadeOutImage.startAnimation(animation)

    animation.setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationStart(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationRepeat(p0: Animation?) {
//                not implemented
        }

        override fun onAnimationEnd(p0: Animation?) {
            fadeOutImage.visibility = View.INVISIBLE
        }
    })

使用していくつかの行を保存する可能性がありますfade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()
longi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.