You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何在倒计时动画结束时执行指定代码?

解决Android ValueAnimator结束时执行代码的问题

嘿,我来帮你搞定这个动画结束触发逻辑的问题~你可以通过给ValueAnimator添加动画监听器来监听它的生命周期事件,从而在动画结束时执行指定代码。不过要先提个关键点:如果你的动画设置了setRepeatCount(ValueAnimator.INFINITE),它会无限循环,默认不会触发onAnimationEnd方法——除非你手动调用colorAnimation.cancel()/colorAnimation.end(),或者把重复次数改成固定值(比如setRepeatCount(0)表示只执行一次后结束)。

下面给你两种常见场景的实现方案:

场景1:动画执行固定次数后结束(非无限循环)

如果你的倒计时动画不需要一直循环,比如只跑一次或者固定N次,直接给动画加监听器就行:

int colorFrom = getResources().getColor(R.color.green);
int colorTo = getResources().getColor(R.color.white);
ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
// 改成固定重复次数,比如0=不重复,执行一次就结束
colorAnimation.setRepeatCount(0); 
colorAnimation.setRepeatMode(ValueAnimator.RESTART);

// 添加动画监听器
colorAnimation.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        // 动画开始时的操作(可选)
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        // 这里写动画结束时要执行的代码,比如更新TextView文本
        yourTextView.setText("倒计时结束!");
        // 还可以加其他逻辑,比如切换UI状态、启动新任务等
    }

    @Override
    public void onAnimationCancel(Animator animation) {
        // 动画被取消时的操作(可选)
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
        // 动画重复时的操作(可选),设置了重复次数才会触发
    }
});

// 记得启动动画
colorAnimation.start();

要是觉得重写四个方法太麻烦,也可以用AnimatorListenerAdapter,只重写你需要的方法:

colorAnimation.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        // 这里写结束时的逻辑
        yourTextView.setText("倒计时完成");
    }
});

场景2:动画无限循环,但需要手动结束时执行代码

如果必须保持无限循环(比如倒计时到某个条件才停止),那你在调用colorAnimation.end()或者colorAnimation.cancel()后,onAnimationEnd会被触发。举个例子:

// 假设在某个按钮点击或倒计时时间到的时候停止动画
stopCountdownBtn.setOnClickListener(v -> {
    colorAnimation.end(); // 或者用colorAnimation.cancel()
});

// 同样添加监听器
colorAnimation.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        // 手动停止后执行的代码
        yourTextView.setText("已停止倒计时");
    }
});

另外,如果你想每次循环结束都执行代码(不是整个动画结束),可以重写onAnimationRepeat方法——它会在每次重复开始前触发,也就是上一次循环结束的时机。


内容的提问来源于stack exchange,提问作者Ferenc Deak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:20:08