web-dev-qa-db-ja.com

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

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

82
Paulo Barros

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

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

機能は受け入れられた回答と同じですが、より簡潔な方法で:

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

楽しい :)

25
Antzi

アニメーションオブジェクトを取得し、アニメーションリスナーを追加するだけです。コードの例を次に示します。

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


            }
        });
9
Gaurav Arora

Animation.setFillAfter を使用してこれを実現することもできます

8
Pavan

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
        }
    })
1
richc