Mat*_*att 5 java android countdowntimer progress-bar
我有一个20秒的倒数计时器成功地在我的琐事游戏上工作.我想在屏幕上添加一个ProgressBar(不是a ProgressDialog).我发现Android的开发者指南令人困惑.我搜索了大量示例,并尝试将它们组合到我的代码中.现在,当我运行游戏时显示的是一个空栏,在每个游戏问题中没有"进展".
QuestionView.java
public class QuestionView extends Activity {
int correctAnswers = 0;
int wrongAnswers = 0;
int answer = 0;
int i = 0;
long score = 0;
long startTime = 20000;
long interval = 1000;
long points;
boolean timerHasStarted = false;
String category;
Button answer1, answer2, answer3, answer4;
TextView question, pointCounter, questionNumber, timeCounter;
ArrayList<Question> queries;
Timer cdTimer;
ProgressBar bar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.questionviewmain);
answer1 = (Button)findViewById(R.id.answer1);
answer2 = (Button)findViewById(R.id.answer2);
answer3 = (Button)findViewById(R.id.answer3);
answer4 = (Button)findViewById(R.id.answer4);
question = (TextView)findViewById(R.id.question);
category = getIntent().getStringExtra("category");
queries = getIntent().getParcelableArrayListExtra("queries");
pointCounter = (TextView)findViewById(R.id.timer);
questionNumber = (TextView)findViewById(R.id.timeElapsedView);
timeCounter = (TextView)findViewById(R.id.timeCounter);
cdTimer = new Timer(startTime, interval);
bar = (ProgressBar)findViewById(R.id.progressbar);
bar.setIndeterminate(false);
bar.setMax(9);
loadQuestion();
}
public void loadQuestion() {
bar.setProgress(i);
if(i == 10) {
endQuiz();
} else {
if(!timerHasStarted) {
cdTimer.start();
timerHasStarted = true;
} else {
cdTimer.start();
timerHasStarted = false;
}
answer = queries.get(i).getCorrectAnswer();
question.setText(queries.get(i).getQuery());
answer1.setText(queries.get(i).getA1());
answer2.setText(queries.get(i).getA2());
answer3.setText(queries.get(i).getA3());
answer4.setText(queries.get(i).getA4());
answer1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(0);
if(answer == 0) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
answer2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(1);
if(answer == 1) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
answer3.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(2);
if(answer == 2) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
answer4.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
queries.get(i).setSelectedAnswer(3);
if(answer == 3) {
correctAnswers++;
nextQuestion();
} else {
wrongAnswers++;
nextQuestion();
}
}
});
}
}
public ArrayList<Question> getQueries() {
return queries;
}
public void nextQuestion() {
score = score + points;
i++;
loadQuestion();
}
public class Timer extends CountDownTimer {
public void startCountdownTimer() {
}
public Timer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
if(i >= 9) {
cdTimer.cancel();
endQuiz();
} else {
wrongAnswers++;
nextQuestion();
}
}
@Override
public void onTick(long millisUntilFinished) {
timeCounter.setText("Time remaining: " + (millisUntilFinished / 100));
points = (millisUntilFinished / 100) / 2;
pointCounter.setText("Points remaining: " + points);
if(i < 10) {
questionNumber.setText("Question " + (i + 1) + " of 10");
}
}
}
public void endQuiz() {
Intent intent = new Intent(QuestionView.this, Results.class);
intent.putExtra("correctAnswers", correctAnswers);
intent.putExtra("wrongAnswers", wrongAnswers);
intent.putExtra("score", score);
intent.putParcelableArrayListExtra("queries", queries);
intent.putExtra("category", category);
startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
XML代码
<ProgressBar
android:id="@+id/progressbar"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:visibility="visible"
style="@android:style/Widget.ProgressBar.Horizontal" />
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是让 ProgressBar 慢慢地向下滴,直到为用户分配的每个问题的 20 秒时间消失。
新答案
为此,我们添加一个新行onTick():
bar.setProgress((int) Math.round(millisUntilFinished / 1000.0));
Run Code Online (Sandbox Code Playgroud)
(您可能需要调整数据类型,我远离我的编译器......而且我不喜欢 CountDownTimer 类,它不准确并且经常跳过倒数第二个数字。我在这里编写了一个备用类:android CountDownTimer - 刻度之间的额外毫秒延迟)
原始答案
我有几点建议:
您是否定义了 ProgressBar 的最大值?
bar.setMax(9);
Run Code Online (Sandbox Code Playgroud)我建议加载i为进度而不是常量值 10:
bar.setProgress(i);
Run Code Online (Sandbox Code Playgroud)如果您仍然没有看到任何进度,请确保您没有处于不确定模式:
bar.setIndeterminate(false);
Run Code Online (Sandbox Code Playgroud)
(这假设您正在使用可以描述进度的ProgressBar 。)
添加
将此代码移至onCreate():
bar = (ProgressBar)findViewById(R.id.progressbar);
bar.setIndeterminate(false); // May not be necessary
bar.setMax(9);
Run Code Online (Sandbox Code Playgroud)
然后将此行移动到loadQuestion():
bar.setProgress(i);
Run Code Online (Sandbox Code Playgroud)
否则,进度将永远不会更新,因为您只创建一个 CountDownTimer 并且从未真正调用startCountdownTimer().
| 归档时间: |
|
| 查看次数: |
9237 次 |
| 最近记录: |