当前,您调用
Thread.sleep(25)UI线程。这意味着UI线程将被阻止,并且不会更新您的文本视图。经过所有这些阻止之后,它最终会在for循环之后被取消阻止,因此您可以立即查看所有文本字段的更新。
为了获得更好的用户体验,请 不要让UI线程进入睡眠状态。
您需要一些可以在一段时间后完成一些工作的东西。
android.os.Handler是一个不错的选择。它具有一种
postDelayed可以在一段时间后完成您想做的事情的方法。
IMO,直接致电
postDelayed确实可以完成您的工作。但是每个
postDelayed调用都包含另一个,以便在几秒钟后更新下一个文本视图。这意味着您将获得14层嵌套!那不是很干净的代码,对吗?
所以,让我介绍一下
Timer课程!
这里是:
import android.os.Handler;public class Timer { private Handler handler; private boolean paused; private int interval; private Runnable task = new Runnable () { @Override public void run() { if (!paused) { runnable.run (); Timer.this.handler.postDelayed (this, interval); } } }; private Runnable runnable; public int getInterval() { return interval; } public void setInterval(int interval) { this.interval = interval; } public void startTimer () { paused = false; handler.postDelayed (task, interval); } public void stopTimer () { paused = true; } public Timer (Runnable runnable, int interval, boolean started) { handler = new Handler (); this.runnable = runnable; this.interval = interval; if (started) startTimer (); }}
这东西很酷。
为了满足要求,让我们在活动类中添加
counter和
textViewToUpdate,以便我们知道它的编号以及接下来要更新的文本视图。哦,将
textViews变量移到类级别:
int counter = 1;int textViewToUpdate = 0;TextView[] textViews;
然后初始化
textViewsin
onCreate:
textViews = new TextView[] { (TextView)findViewById(R.id.player1_1), (TextView)findViewById(R.id.player1_2), (TextView)findViewById(R.id.player1_3), (TextView)findViewById(R.id.player1_4), (TextView)findViewById(R.id.player1_5), (TextView)findViewById(R.id.player1_6), (TextView)findViewById(R.id.player1_7), (TextView)findViewById(R.id.player2_1), (TextView)findViewById(R.id.player2_2), (TextView)findViewById(R.id.player2_3), (TextView)findViewById(R.id.player2_4), (TextView)findViewById(R.id.player2_5), (TextView)findViewById(R.id.player2_6), (TextView)findViewById(R.id.player2_7)};
首先在您的课程中创建一个计时器:
Timer t;
在您的
Initialization方法中,创建一个可运行的。这个可运行对象将每隔几秒钟运行一次。
Runnable r = new Runnable () { @Override public void run() { PlayActivity self = PlayActivity.this; self.textViews[self.textViewToUpdate].setText(Integer.toString(self.counter)); self.textViewToUpdate++; if (self.textViewToUpdate == self.textViews.length) { self.textViewToUpdate = 0; self.counter++; if (self.counter == 8) { self.t.stopTimer(); } } }}
然后,我们创建计时器并运行它:
t = new Timer(r, interval, true);
您可以
interval用任何喜欢的数字代替,也许是
250(0.25秒)?
还有BOOM!你做到了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)