Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中带倒计时的循环进度条_Android_Android Progressbar_Countdowntimer - Fatal编程技术网

Android中带倒计时的循环进度条

Android中带倒计时的循环进度条,android,android-progressbar,countdowntimer,Android,Android Progressbar,Countdowntimer,我想显示一个带有倒计时的圆形进度条。计时器从10分钟开始到0分钟。在文本视图中,我显示了计时器,工作正常。 但它并没有反映在进度条中,进度条根本没有改变。 下面是我尝试过的代码 public class MainActivity extends AppCompatActivity { ProgressBar barTimer; CountDownTimer countDownTimer; TextView textTimer; @Override prot

我想显示一个带有倒计时的圆形进度条。计时器从10分钟开始到0分钟。在文本视图中,我显示了计时器,工作正常。 但它并没有反映在进度条中,进度条根本没有改变。 下面是我尝试过的代码

public class MainActivity extends 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);
        textTimer = findViewById(R.id.textTimer);
        barTimer.setProgress(100);
        startTimer(10);


    }

    private void startTimer(final int minuti) {
        countDownTimer = new CountDownTimer(60 * minuti * 1000, 500) {
            @Override
            public void onTick(long leftTimeInMilliseconds) {
                long seconds = leftTimeInMilliseconds / 1000;
                barTimer.setProgress((int)seconds);
                textTimer.setText(String.format("%02d", seconds/60) + ":" + String.format("%02d", seconds%60));
            }
            @Override
            public void onFinish() {
                if(textTimer.getText().equals("00:00")){
                    textTimer.setText("STOP");
                }
                else{
                    textTimer.setText("2:00");
                    barTimer.setProgress(60*minuti);
                }
            }
        }.start();

    }
}
xml代码

<TextView
        android:id="@+id/textTimer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ProgressBar
        android:id="@+id/barTimer"
        android:layout_below="@+id/textTimer"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:indeterminate="false"
        android:progressDrawable="@drawable/circular_progress"

        />


有谁能告诉我哪里出错以及如何解决这个问题吗?

所以我运行了你的代码,发现是你付出的时间导致了这个问题,事实上,
progressbar
正在工作,但是因为你最初付出的时间是10(分钟),所以这个过程太慢了,你看不到它在工作,为了测试,尝试将其更改为1,您将看到进度条移动

startTimer(10);


比例因子不正确,因此MaxProges和SetProges值也不正确。有两种方法可以解决此问题

1.设置秒数=LeftTimeinMillics/600,而不是1000

假设X%=1秒,然后100%=60秒,然后X%=100/60秒,但我们以毫秒为单位计算 因此X%=100/(60*1000)=1/600毫秒。 此外,我们将60秒设置为100%,因此将您的setproges和setMax乘以系数10。因为600秒是10分钟

barTimer.setProgress(1000);
barTimer.setMax(1000);

long seconds = leftTimeInMilliseconds / 600;
2.与上述类似,而不是除以600除以6000。 秒=LeftTimein毫秒/6000

假设X%=1秒,然后100%=600秒(10分钟),然后X%=100/600秒,但我们以毫秒为单位计算 因此X%=100/(60*1000)=1/6000毫秒

现在,由于我们直接计算10分钟,因此无需将setproges和setMax乘以任何因子

barTimer.setProgress(100);
barTimer.setMax(100);

long seconds = leftTimeInMilliseconds / 6000;
此外,我建议将倒计时间隔设置为1秒,而不是0.5秒

希望这有帮助。
如果答案有帮助,请将其标记为已接受。

非常感谢@udit7395。我已经尝试了第二种方法,它正在工作。textview计时器中存在一个问题,从01.39开始计时。我如何显示10分钟,如10.00?@Ravikumar使用onTick给出的LeftTimein毫秒。如果问题没有解决,请创建/提出一个新问题,我将在那里解决,因为在评论中回答问题违反stackoverflow准则。好的@udit7395。我会试试这个。但是圆形进度条不平滑,你能告诉我如何使它平滑吗?
barTimer.setProgress(100);
barTimer.setMax(100);

long seconds = leftTimeInMilliseconds / 6000;