Android 使用整数更改进度条最大值

Android 使用整数更改进度条最大值,android,Android,在我的计时器应用程序中,有一个进度条用于设置倒计时时间。我设法使进度条随着倒计时的进度而移动,但现在我想这样做:每当我开始倒计时时,进度条最大值应该设置为计时器整数的值。例如,如果我将倒计时设置为30秒并开始倒计时,我的进度条应该跳到右边,并显示从右到左的进度。类似于三星standart时钟应用程序倒计时上的圆圈。我该怎么办?我希望你明白我的意思 public class MainActivity extends AppCompatActivity { SeekBar timerSee

在我的计时器应用程序中,有一个进度条用于设置倒计时时间。我设法使进度条随着倒计时的进度而移动,但现在我想这样做:每当我开始倒计时时,进度条最大值应该设置为计时器整数的值。例如,如果我将倒计时设置为30秒并开始倒计时,我的进度条应该跳到右边,并显示从右到左的进度。类似于三星standart时钟应用程序倒计时上的圆圈。我该怎么办?我希望你明白我的意思

public class MainActivity extends AppCompatActivity {

    SeekBar timerSeekbar;
    TextView timertextview;
    boolean counteractiv = false;
    Button gobutton;
    CountDownTimer countDownTimer;
    int progress;

    public void resetTimer(){

        countDownTimer.cancel();
        timertextview.setText("0:30");
        timerSeekbar.setEnabled(true);
        counteractiv = false;
        gobutton.setText("Start");
        timerSeekbar.setMax(600);
        timerSeekbar.setProgress(30);

    }

    public void buttonclicked(View view){

        if(counteractiv){
            resetTimer();
        }else{
            //timerSeekbar.setMax((int)secondsleft);
            counteractiv = true;
            timerSeekbar.setEnabled(false);
            gobutton.setText("Stop!");

            countDownTimer = new CountDownTimer(timerSeekbar.getProgress() * 1000, 1000){

                @Override
                public void onTick(long l) {
                    updatetimer((int)l/1000);

                    timerSeekbar.setProgress((int)l/1000);
                }

                @Override
                public void onFinish() {
                    Toast.makeText(MainActivity.this, "Time over!", Toast.LENGTH_LONG).show();
                    gobutton.setText("Reset");
                }
            }.start();

            timerSeekbar.setMax((int)progress/1000);
        }

    }

    public void updatetimer(int secondsleft){

        int minutes = secondsleft/60;
        int seconds = secondsleft - (minutes*60);

        String secondsString = Integer.toString(seconds);
        String minutesString = Integer.toString(minutes);

        if(seconds <=9){
            secondsString = "0" + secondsString;
        }

        timertextview.setText(minutesString + ":" + secondsString);
        timerSeekbar.setProgress(secondsleft);

        progress = secondsleft;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        timerSeekbar = findViewById(R.id.seekBar);
        timertextview = findViewById(R.id.CountdowntextView);
        gobutton = findViewById(R.id.StartButton);

        timerSeekbar.setMax(600);
        timerSeekbar.setProgress(30);

        timerSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                updatetimer(i);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
    }
}
public类MainActivity扩展了AppCompatActivity{
SeekBar timerSeekbar;
TextView timertextview;
布尔值=假;
按钮按钮;
倒计时倒计时;
智力进步;
公共无效重置计时器(){
倒计时。取消();
timertextview.setText(“0:30”);
timerSeekbar.setEnabled(true);
iv=假;
setText(“开始”);
设置最大时间(600);
timerSeekbar.setProgress(30);
}
公共作废按钮勾选(查看){
如果(iv){
重置计时器();
}否则{
//timerSeekbar.setMax((int)secondsleft);
iv=正确;
timerSeekbar.setEnabled(false);
setText(“停止!”);
countDownTimer=新的countDownTimer(timerSeekbar.getProgress()*10001000){
@凌驾
公共空白条(长l){
更新程序((int)l/1000);
timerSeekbar.setProgress((int)l/1000);
}
@凌驾
公共无效onFinish(){
Toast.makeText(MainActivity.this,“时间到了!”,Toast.LENGTH\u LONG.show();
设置文本(“重置”);
}
}.start();
timerSeekbar.setMax((int)进度/1000);
}
}
公共无效更新程序(int secondsleft){
整数分钟=秒英尺/60;
整数秒=秒英尺-(分钟*60);
字符串secondsString=Integer.toString(秒);
字符串minuteString=Integer.toString(分钟);

如果(秒尝试下面的代码,它会工作。重置时必须将setProgress设置为最大值。此处timertextview和seekbarmax应该匹配以获得正确的结果。此外,倒计时构造函数应该与下面的示例类似

public class TestActivity extends AppCompatActivity {

    SeekBar timerSeekbar;
    TextView timertextview;
    boolean counteractiv = false;
    Button gobutton;
    CountDownTimer countDownTimer;
    int progress;

    public void resetTimer() {
        countDownTimer.cancel();
        timertextview.setText("0:30");
        timerSeekbar.setEnabled(true);
        counteractiv = false;
        gobutton.setText("Start");
        timerSeekbar.setMax(30);
        timerSeekbar.setProgress(30);
    }

    public void buttonclicked(View view) {

        if (counteractiv) {
            resetTimer();
        } else {
            //timerSeekbar.setMax((int)secondsleft);
            counteractiv = true;
            // timerSeekbar.setEnabled(false);
            gobutton.setText("Stop!");
            countDownTimer = new CountDownTimer(30 * 1000, 1000) {
                @Override
                public void onTick(long l) {
                    updatetimer((int) l / 1000);
                }

                @Override
                public void onFinish() {
                    Toast.makeText(EthopiaActivity.this, "Time over!", Toast.LENGTH_LONG).show();
                    gobutton.setText("Reset");
                }
            }.start();
        }
    }

    public void updatetimer(int secondsleft) {

        int minutes = secondsleft / 60;
        int seconds = secondsleft - (minutes * 60);

        String secondsString = Integer.toString(seconds);
        String minutesString = Integer.toString(minutes);

        if (seconds <= 9) {
            secondsString = "0" + secondsString;
        }

        timertextview.setText(minutesString + ":" + secondsString);
        timerSeekbar.setProgress(secondsleft);
        progress = secondsleft;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timerSeekbar = findViewById(R.id.seekBar);
        timertextview = findViewById(R.id.CountdowntextView);
        gobutton = findViewById(R.id.StartButton);
        timerSeekbar.setMax(30);
        timerSeekbar.setProgress(1);

        timerSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                updatetimer(i);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
    }
}
公共类测试活动扩展了AppCompative活动{
SeekBar timerSeekbar;
TextView timertextview;
布尔值=假;
按钮按钮;
倒计时倒计时;
智力进步;
公共无效重置计时器(){
倒计时。取消();
timertextview.setText(“0:30”);
timerSeekbar.setEnabled(true);
iv=假;
setText(“开始”);
timerSeekbar.setMax(30);
timerSeekbar.setProgress(30);
}
公共作废按钮勾选(查看){
如果(iv){
重置计时器();
}否则{
//timerSeekbar.setMax((int)secondsleft);
iv=正确;
//timerSeekbar.setEnabled(false);
setText(“停止!”);
倒计时=新的倒计时(30*1000,1000){
@凌驾
公共空白条(长l){
更新程序((int)l/1000);
}
@凌驾
公共无效onFinish(){
Toast.makeText(etopiaActivity.this,“时间结束!”,Toast.LENGTH\u LONG.show();
设置文本(“重置”);
}
}.start();
}
}
公共无效更新程序(int secondsleft){
整数分钟=秒英尺/60;
整数秒=秒英尺-(分钟*60);
字符串secondsString=Integer.toString(秒);
字符串minuteString=Integer.toString(分钟);

如果(秒)在onTick()中更新进度条有什么问题?好吧,更新进度条的当前状态在那里有效,但不是
timerSeekbar.setMax((int)progress)
.Bc它会重置每个刻度的最大值,而这不是我想要的。重置seekbar时,您希望将其保持在最大位置吗?
<SeekBar
    android:id="@+id/seekBar"
    style="@style/Widget.AppCompat.SeekBar.Discrete"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginEnd="5dp"
    android:layout_marginStart="-5dp"
    android:layout_marginTop="28dp" />