ビュー(フラグメント内)にフェードアウトアニメーションがあり、アニメーションが発生するたびに、ビューが終了した後、ビュー自体が再描画されます。 view.SetVisibility(View.GONE)
を実行することで回避策を見つけました。しかし、アニメーションが終了するのを待ちません。このsetVisibilityコードは、アニメーションが終了した後にのみ実行したいと思います。それを行う最良の方法は何ですか?
次のようにアニメーションリスナーをアニメーションオブジェクトに追加できます。
anim.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
}
});
機能は受け入れられた回答と同じですが、より簡潔な方法で:
/* Add/Remove any animation parameter */
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() {
@Override
public void run() {
theView.setVisibility(View.GONE);
}
});
楽しい :)
アニメーションオブジェクトを取得し、アニメーションリスナーを追加するだけです。コードの例を次に示します。
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**
}
});
Animation.setFillAfter を使用してこれを実現することもできます
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
}
})