这是我第一次使用Android Studio,我的Java技能基本上不存在,所以我需要对我正在处理的项目提供一些帮助。 我需要制作一个在一定休息后重复的计时器。用户应该决定计时器重复的次数以及休息的持续时间。 到目前为止,我做了标准倒数计时器,但无论我尝试什么,我都不能重复
这是我到目前为止的工作代码 接口:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.asus.timer.MainActivity"
android:padding="20dp"
android:orientation="vertical"
>
<EditText
android:id="@+id/editTextSession"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal"
android:padding="20dp"
android:hint="Session (seconds)"
android:textAlignment="center"
/>
<EditText
android:id="@+id/editTextBreak"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal"
android:padding="20dp"
android:hint="Break (seconds)"
android:textAlignment="center"
/>
<EditText
android:id="@+id/editTextRepeats"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal"
android:padding="20dp"
android:hint="Repeats"
android:textAlignment="center"
/>
<Button
android:id="@+id/buttonStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start!"
android:padding="20dp"
/>
<TextView
android:id="@+id/textViewTimer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:padding="20dp"
android:textAlignment="center"
android:textSize="60dp"
android:paddingTop="40dp"
android:gravity="center"
/>
功能
public class MainActivity extends AppCompatActivity {
EditText editTextSession;
EditText editTextBreak;
EditText editTextRepeats;
Button buttonStart;
TextView textViewTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextSession =(EditText) findViewById(R.id.editTextSession);
editTextBreak =(EditText) findViewById(R.id.editTextBreak);
editTextRepeats =(EditText) findViewById(R.id.editTextRepeats);
buttonStart =(Button) findViewById(R.id.buttonStart);
textViewTimer =(TextView) findViewById(R.id.textViewTimer);
buttonStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = editTextSession.getText().toString();
int seconds = Integer.valueOf(editTextSession.getText().toString());
CountDownTimer countDownTimer = new CountDownTimer(seconds * 1000, 1000) {
@Override
public void onTick(long millis) {
textViewTimer.setText("time:" + (int) (millis / 1000));
}
@Override
public void onFinish() {
extViewTimer.setText("Finished!");
}
}.start();
}
}
);
答案 0 :(得分:0)
如果您正在寻找另一种创建计时器的方法,可以使用Runnable()
执行此类操作:
private TextView timeCounterTextView;
private int smsTimeOut = 10; // 10 SECONDS
private Runnable timeCounterRunnable = new Runnable() {
@Override
public void run() {
if (smsTimeOut == 1) {
//Do whatever when timeout
}
smsTimeOut--;
timeCounterTextView.setText(String.valueOf(smsTimeOut));
handler.postDelayed(this, 1000);
}
};
每当您想要开始倒计时时,使用init()
方法初始化并启动计时器,如下所示:
private void init(){
handler.removeCallbacks(timeCounterRunnable);
smsTimeOut = 10;
handler = new Handler();
handler.post(timeCounterRunnable);
}
只要您想重复,就可以再次致电init()
。
希望这会有所帮助。
答案 1 :(得分:0)
您是否尝试过Integer.parseInt(String value)而不是Integer.valueOf(String value)?也许它会产生差异。如果有人输入了错误的值,您可以添加例外。
答案 2 :(得分:0)
使用此
timer.start();
然后停止:
timer.cancel();
示例:
String text = editTextSession.getText().toString();
int seconds = Integer.valueOf(text);
//get how many repeat
String repeatText = editTextSession.getText().toString();
int repeat = Integer.valueOf(repeatText);
int count= 0;
CountDownTimer countDownTimer = new CountDownTimer(seconds * 1000, 1000) {
@Override
public void onTick(long millis) {
textViewTimer.setText("time:" + (int)(millis / 1000));
}
@Override
public void onFinish() {
extViewTimer.setText("Finished!");
count++;
//check if count still less than repeat number
if(count < repeat){
Runnable r = new Runnable() {
public void run() {
countDownTimer.start();
}};
new Handler().postDelayed(r,2000); //delay repeat timer 2 seconds
}
else{
countDownTimer.cancel();
count = 0;
}
}
}.start();