Android - 一段时间后采取行动
Android - taking actions after some time
我想创建一个应用程序,点击一个按钮后,用户会看到一些信息,但不是一次性看到所有信息,而是一段时间后看到的部分信息。例如,用户点击按钮,它显示 "GO STRAIGHT",然后 5 秒后显示 "TURN LEFT",接下来的 3 秒后显示 "TURN RIGHT",然后再接下来的 2 秒后显示 "GO STRAIGHT" 等。现在我使用 CountDownTimer。我不确定这是个好主意,但至少我得到了第一部分信息,5 秒后我得到了第二部分信息。问题是我不知道如何制作更多它们以及如何使信息出现在不同的时间段,如 5 秒、3 秒、2 秒等。我应该创建更多 CountDownTimers 来实现它还是有一个更好的方法?到目前为止我的简单代码:
public class MainActivity extends Activity {
TextView text1;
private static final String FORMAT = "%02d:%02d:%02d";
CountDownTimer CountDownTimer1;
int seconds , minutes;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text1=(TextView)findViewById(R.id.textView1);
}
public void onClick(View view)
{
System.out.println("GO STRAIGHT");
CountDownTimer1 = new CountDownTimer(5000, 1000) {
public void onTick(long millisUntilFinished) {
text1.setText(""+String.format(FORMAT,
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
text1.setText("done!");
System.out.println("TURN LEFT");
}
}.start();
}
}
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="34dp"
android:layout_marginTop="58dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Action"
android:id="@+id/button"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="89dp"
android:onClick="onClick" />
</RelativeLayout>
我也试过类似下面的方法,但它不起作用,所以可能我的想法不正确
public void onClick(View view)
{
System.out.println("GO STRAIGHT");
CountDownTimer1 = new CountDownTimer(50000, 1000) {
public void onTick(long millisUntilFinished) {
long time = millisUntilFinished;
if(time == 40000)
{
System.out.println("TURN LEFT");
}
else if(time == 20000)
{
System.out.println("TURN RIGHT");
}
else if(time== 10000)
{
System.out.println("GO BACK");
}
text1.setText(""+String.format(FORMAT,
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
text1.setText("done!");
//System.out.println("TURN LEFT");
}
}.start();
}
您可以使用 Handler 和 postDelayed 方法在一段时间后执行一些操作。当一个处理程序完成其工作时,您将以另一个时间间隔启动另一个处理程序,并在它完成时执行其他操作。以下是一些示例:https://www.codota.com/android/methods/android.os.Handler/postDelayed
我想创建一个应用程序,点击一个按钮后,用户会看到一些信息,但不是一次性看到所有信息,而是一段时间后看到的部分信息。例如,用户点击按钮,它显示 "GO STRAIGHT",然后 5 秒后显示 "TURN LEFT",接下来的 3 秒后显示 "TURN RIGHT",然后再接下来的 2 秒后显示 "GO STRAIGHT" 等。现在我使用 CountDownTimer。我不确定这是个好主意,但至少我得到了第一部分信息,5 秒后我得到了第二部分信息。问题是我不知道如何制作更多它们以及如何使信息出现在不同的时间段,如 5 秒、3 秒、2 秒等。我应该创建更多 CountDownTimers 来实现它还是有一个更好的方法?到目前为止我的简单代码:
public class MainActivity extends Activity {
TextView text1;
private static final String FORMAT = "%02d:%02d:%02d";
CountDownTimer CountDownTimer1;
int seconds , minutes;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text1=(TextView)findViewById(R.id.textView1);
}
public void onClick(View view)
{
System.out.println("GO STRAIGHT");
CountDownTimer1 = new CountDownTimer(5000, 1000) {
public void onTick(long millisUntilFinished) {
text1.setText(""+String.format(FORMAT,
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
text1.setText("done!");
System.out.println("TURN LEFT");
}
}.start();
}
}
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="34dp"
android:layout_marginTop="58dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Action"
android:id="@+id/button"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="89dp"
android:onClick="onClick" />
</RelativeLayout>
我也试过类似下面的方法,但它不起作用,所以可能我的想法不正确
public void onClick(View view)
{
System.out.println("GO STRAIGHT");
CountDownTimer1 = new CountDownTimer(50000, 1000) {
public void onTick(long millisUntilFinished) {
long time = millisUntilFinished;
if(time == 40000)
{
System.out.println("TURN LEFT");
}
else if(time == 20000)
{
System.out.println("TURN RIGHT");
}
else if(time== 10000)
{
System.out.println("GO BACK");
}
text1.setText(""+String.format(FORMAT,
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
text1.setText("done!");
//System.out.println("TURN LEFT");
}
}.start();
}
您可以使用 Handler 和 postDelayed 方法在一段时间后执行一些操作。当一个处理程序完成其工作时,您将以另一个时间间隔启动另一个处理程序,并在它完成时执行其他操作。以下是一些示例:https://www.codota.com/android/methods/android.os.Handler/postDelayed