我有一个ImageView
用于通过AnimationDrawable
显示进度。当我想展示我的进度微调器时,我这样做:
animDrawable.start();
ObjectAnimator.ofFloat(view, "alpha", 1.0f).setDuration(300).start();
当我想隐藏微调器时,我这样做:
ObjectAnimator.ofFloat(view, "alpha", 0.0f).setDuration(300).start();
animDrawable.stop();
然而,这会导致动画立即停止。我希望它只在ObjectAnimator
完全消失到0.0 alpha后停止。有没有办法按照“AnimationCompleted”回调的方式设置一些东西?
答案 0 :(得分:40)
更现代的方法是使用ViewPropertyAnimator
:
view.animate()
.alpha(0f)
.withEndAction(new Runnable() {
@Override
public void run() {
// Do something.
}
})
.start();
或者,如果你正在使用RetroLambda:
view.animate()
.alpha(0f)
.withEndAction(() -> {
// Do something.
})
.start();
答案 1 :(得分:11)
关于ObjectAnimator对象的原始问题,您可以设置一个Animator.AnimatorListener对象,该对象定义了几个动画状态回调。你想覆盖public void onAnimationEnd(Animator animation)
animation.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
Toast.makeText(VideoEditorActivity.this, "animation ended", Toast.LENGTH_LONG).show();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
答案 2 :(得分:2)
借助androidx,您可以使用在动画结束时调用的doOnEnd方法
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration;
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
答案 3 :(得分:0)
您还可以查看postOnAnimation(Runnable)