平滑的圆形进度条动画Android

3

我正在尝试创建一个带有倒计时器的平滑进度条。我希望计时器能够倒计时到20秒。我正在使用以下代码,但我无法实现平滑下降的进度条。倒计时tick函数在进度条方面运行良好,但不是在平滑行为方面。我从stackoverflow中找到了以下代码,我在我的项目中使用了它,但你能告诉我我做错了什么吗。

 if(android.os.Build.VERSION.SDK_INT >= 11){
        // will update the "progress" propriety of seekbar until it reaches progress
        ObjectAnimator animation = ObjectAnimator.ofInt(progressBarTimer, "progress", 0, 500);
        animation.setDuration(20000); // 0.5 second
        animation.setInterpolator(new LinearInterpolator());
        animation.start();
    }
    else
        progressBarTimer.setProgress(100);

enter image description here


请查看此库 https://github.com/lzyzsd/CircleProgress - Remees M Syde
@RemeesMSyde 我正在使用自定义进度条。 - Ramanuj Basu
1
你能解决你的问题吗?我也面临着同样的困境。 - AlphaDeveloper
3个回答

2
我只是将进度条分成1000个部分,并每100毫秒调用一次,这样会更加平滑。
公共类MainActivity扩展自AppCompatActivity {
ProgressBar barTimer;
CountDownTimer countDownTimer;
TextView textTimer;
@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    barTimer = findViewById(R.id.barTimer);


   barTimer.setMax(1000);
    startTimer(10); 

} 

private void startTimer(final int minuti) {
    countDownTimer = new CountDownTimer(60 * minuti * 1000, 100) {
        @Override 
        public void onTick(long leftTimeInMilliseconds) {

            long seconds = leftTimeInMilliseconds / 600;

            barTimer.setProgress((int)seconds);

        } 
        @Override 
        public void onFinish() { 

        } 
    }.start();

} 
} 

0

Kotlin 代码

import android.animation.ObjectAnimator;
import android.view.animation.DecelerateInterpolator;

public void setProgressWithAnimation(float progress) {
    ObjectAnimator anim = ObjectAnimator.ofFloat(this, "show progress", progress);
    anim.setDuration(6000);
    anim.setInterpolator(new DecelerateInterpolator());
    anim.start();
}

@suraj-rao ObjectAnimator和CountDownTimer哪个更好?我问这个问题是因为我的用例是我有一个列表...所以每个项目都会有自己的进度条。 - Shadow Droid

0
我是通过以下代码实现的:
val ORDER_ACCEPT_TIME = 5000L //5 seconds
val INTERVAL = 30

progressBar.max = ORDER_ACCEPT_TIMER_TIME

private fun startTimer(){
        pauseTimer = object : CountDownTimer(ORDER_ACCEPT_TIMER_TIME, INTERVAL){
            override fun onTick(millisUntilFinished: Long) {

                val secondsInMilli: Long = 1000

                val diff = millisUntilFinished
                val elapsedSeconds = diff / secondsInMilli

                val progress = INTERVAL + progressBar.progress
                progressBar.progress = progress.toInt()

                tvProgress.text = elapsedSeconds.toString() //(optional) to show countdown textview
                
            }

            override fun onFinish() {
                
            }
        }

        pauseTimer.start()
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接