我在一个视图中使用了淡出动画(该视图位于一个片段内),每当动画发生时,动画结束后该视图会重新绘制。我找到了一个解决方法,即使用view.SetVisibility(View.GONE)
。但它不会等待动画完成。我想在动画完成后执行这个setVisibility代码。最好的方法是什么?
我在一个视图中使用了淡出动画(该视图位于一个片段内),每当动画发生时,动画结束后该视图会重新绘制。我找到了一个解决方法,即使用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) {
}
});
if (!anim.hasStarted() || anim.hasEnded())
检测动画是否仍在运行。请注意保持内容不变,使其更通俗易懂。 - theczechsensation本质上与被接受的答案相同,但表述更加简洁明了:
// Add/Remove any animation parameter
theView.animate()
.alpha(0)
.setDuration(2000)
.withEndAction(new Runnable() {
@Override
public void run() {
theView.setVisibility(View.GONE);
}
});
祝愉快 :)
.withEndAction(() -> theView.setVisibility(View.GONE));
- theBugger只需获取您的动画对象并将动画监听器添加到其中。以下是示例代码:
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**
}
});
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