用整数更改进度条最大值

  • 本文关键字:最大值 整数 android
  • 更新时间 :
  • 英文 :


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

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) {
}
});
}
}

所以基本上我试图将柱线的进度转换为全局整数progress并使用它来定义timerSeekbar.setMax((int)progress)但是我在哪里设置这行代码以使其正常工作?

试试下面的代码,它有效。重置时,您必须将设置进度设置为最大值。在这里,timertextview和seekbarmax应该匹配以获得正确的结果。此外,CountDownTimer 构造函数应该像下面的示例一样。

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) {
}
});
}
}

XML看起来像这样,在这里你必须删除静态值(最大值和进度(

<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" />

祝你好运。

最新更新