【问题标题】:Smooth Circular Progressbar Animation Android平滑的圆形进度条动画 Android
【发布时间】:2017-03-06 14:00:10
【问题描述】:

我正在尝试创建一个带有倒数计时器的平滑进度条。我希望计时器最多倒计时 20 秒。我正在使用下面的代码,但我无法实现进度条的平滑下降。倒计时刻度功能在进度条上运行良好,但在平滑行为的情况下则不行。我从我在项目中使用的 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);

【问题讨论】:

标签: java android


【解决方案1】:

我只是将进度条分成 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();

} 
} 

【讨论】:

    【解决方案2】:

    我通过以下代码实现了这一点:

    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()
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多