Android使用线程每4秒绘制一次
我是Android新手,想创建一个简单的游戏。 因此,我需要一个线程是画一个透明的矩形在不同的位置每4秒与2秒休息(不画)。 我让它使用一个“递归”线程,通过handler.postdayed调用自身的新实例。 我对线程的感觉告诉我,这不是一个很好的方式。。。 在这里搜索类似主题时,我发现了计时器构造。我能用这个解决我的问题吗? 有更好的方法吗 (编辑)该线程用于突出显示游戏板的一部分,但仅持续4秒。之后应该有2秒钟没有突出显示。然后用4秒钟突出显示电路板的下一部分等 我无法使用睡眠,因为它冻结了我的UI。如果有人有类似的情况,下面是我如何解决的:Android使用线程每4秒绘制一次,android,multithreading,time,drawing,Android,Multithreading,Time,Drawing,我是Android新手,想创建一个简单的游戏。 因此,我需要一个线程是画一个透明的矩形在不同的位置每4秒与2秒休息(不画)。 我让它使用一个“递归”线程,通过handler.postdayed调用自身的新实例。 我对线程的感觉告诉我,这不是一个很好的方式。。。 在这里搜索类似主题时,我发现了计时器构造。我能用这个解决我的问题吗? 有更好的方法吗 (编辑)该线程用于突出显示游戏板的一部分,但仅持续4秒。之后应该有2秒钟没有突出显示。然后用4秒钟突出显示电路板的下一部分等 我无法使用睡眠,因为它冻结
public class myRunnable implements Runnable {
private int duration;
private int counter;
private boolean highlight;
public myRunnable(int duration, boolean highlight) {
this.duration = duration;
this.highlight = !highlight;
}
@Override
public void run() {
if (highlight) {
// highlight 4s long
highlight();
invalidate();
myThread = new myRunnable(duration, highlight);
postDelayed(myThread, duration);
} else {
// pause (2s)
resetHighlight();
invalidate();
myThread = new myRunnable(duration, highlight);
postDelayed(myThread, noHighlightDuration);
}
}
}最好的方法是使用invalidate()调用onDraw()函数和更新位置的方法。像这样的-
int x,y;
protected void onDraw(Canvas canvas) {
x=10;
y=10;
canvas.drawRect(___);
update();
invalidate();
}
private void update()
{/*Change the x and y/*}
这里每次从任何地方调用inavlidate()时,都会使用新的x和y再次调用onDraw()。
每4秒调用一次,间隔2秒(无绘图)。
??你能解释一下吗?thx,我知道如何使用onDraw/invalidate。我的问题是,如何这样安排:4s高亮显示,2秒不高亮显示,4s高亮显示另一部分,等等。使用'try{Thread.sleep(30);}catch(InterruptedException e){}'30以毫秒为单位。我为什么要使用30ms?无论如何,我尝试了不同持续时间的Thread.sleep(),我的UI被冻结,直到弹出这个对话框:“我的应用程序没有响应”