gpt4 book ai didi

java - 倒计时器同时运行而不是连续运行

转载 作者:行者123 更新时间:2023-12-02 12:04:20 24 4
gpt4 key购买 nike

我正在尝试制作一个应用程序,您可以在其中输入 session 的长度和 session 的数量,然后对 session 的长度进行倒计时,发出蜂鸣声,然后如果仍有 session ,则自动开始新的倒计时,但是此时,应用程序会同时开始所有倒计时。

因此,如果有 3 个 session ,每个 session 时长为 30 秒,则计数器会每秒减少 3 个值,从 30 减少到 -60。

在这种情况下,我试图让它做的是从 30 到 0 开始倒计时,发出蜂鸣声,然后从 30 到 0 蜂鸣声开始第二次倒计时,然后开始从 30 到 0 的第三次倒计时。

这是 manActivity.Java

package uk.co.test.fitnesstimer;

import android.content.Context;
import android.media.AudioManager;
import android.media.ToneGenerator;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import static uk.co.test.fitnesstimer.R.id.countdownTimer;
import static uk.co.test.fitnesstimer.R.id.session_length;


public class MainActivity extends AppCompatActivity {
public int counter;
public int sessionsLeft;
Button button;
TextView textView;
public int lengthOfActivities = 30;
public int numOfActivities = 1;
public int isActive = 0;

public void increment(View view) {
lengthOfActivities++;
display(lengthOfActivities);
}

public void decrement(View view) {
if (lengthOfActivities > 1) {
lengthOfActivities--;
}
display(lengthOfActivities);
}

public void incrementNumOfActivities(View view) {
numOfActivities++;
displayNum(numOfActivities);
}

public void decrementNumOfActivities(View view) {
if (numOfActivities > 1) {
numOfActivities--;
}
displayNum(numOfActivities);
}

private void display(int number) {
TextView quantityTextView = (TextView) findViewById(R.id.session_length);
quantityTextView.setText(String.valueOf(number));

}

private void displayNum(int number) {
TextView quantityTextView = (TextView) findViewById(R.id.numOfActivities);
quantityTextView.setText(String.valueOf(number));

}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(countdownTimer);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
if (isActive == 0){
isActive = 1;
sessionsLeft = numOfActivities;
counter = lengthOfActivities;
while (sessionsLeft > 0) {
new CountDownTimer((lengthOfActivities * 1000), 1000){
public void onTick(long millisUntilFinished){
textView.setText(String.valueOf(counter));
//if (counter > 0) {
counter = counter - 1;
//}
}
public void onFinish(){
textView.setText("FINISH!!");
ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
toneGen1.startTone(ToneGenerator.TONE_CDMA_PIP,150);
isActive = 0;
}
}.start();
sessionsLeft--;
}
}
else {
Context context = getApplicationContext();
CharSequence text = "Timer is running already!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}

}
});
}
}

这是 ActivityMain XML

<?xml version="1.0" encoding="utf-8"?>
<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"
android:orientation="vertical"
android:padding="16dp"
tools:context="uk.co.test.fitnesstimer.MainActivity">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Length Of Sessions:"
android:textAllCaps="true" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="-"
android:layout_weight="1"
android:onClick="decrement" />

<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/session_length"
android:text="30"
android:gravity="center"
android:layout_weight="1" />

<Button
android:layout_width="1dp"
android:layout_height="wrap_content"
android:text="+"
android:onClick="increment"
android:layout_weight="1" />

</LinearLayout>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Number Of Sessions:"
android:textAllCaps="true" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="-"
android:layout_weight="1"
android:onClick="decrementNumOfActivities" />

<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/numOfActivities"
android:layout_weight="1"

android:gravity="center"
android:text="1" />

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="+"
android:layout_weight="1"
android:onClick="incrementNumOfActivities" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/button"
android:onClick="submitOrder"
android:layout_weight="1" />

</LinearLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:id="@+id/countdownTimer" />

</LinearLayout>

最佳答案

如果你想连续调用倒计时,你应该编写一个递归函数而不是 while .. 它会在每次倒计时后调用自己

将您在 onClick 中编写的所有逻辑放入一个函数中,并使其递归调用自身,直到所有 session 完成。

 private void countDown()
{
counter = lengthOfActivities;
if (sessionsLeft > 0) {
new CountDownTimer((lengthOfActivities * 1000), 1000)
{
public void onTick(long millisUntilFinished){
textView.setText(String.valueOf(counter));
counter = counter - 1;
}
public void onFinish(){
textView.setText("FINISH!!");
ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
toneGen1.startTone(ToneGenerator.TONE_CDMA_PIP,150);
isActive = 0;
sessionsLeft--;
countDown();
}
}.start();
}
}

//在onclick中

if (isActive == 0){
isActive = 1;
sessionsLeft = numOfActivities;
countDown();
}

关于java - 倒计时器同时运行而不是连续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47015425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com