我对Android很陌生,想要制作一款简单的游戏。 因此,我需要一个线程,每隔4秒在不同的位置绘制一个透明的矩形,间隔为2秒(没有绘图)。 我使用“递归”线程使用handler.postdelayed调用自身的新实例。 我对线程的感觉告诉我,这不是一个很好的方式...... 在这里搜索类似的主题时,我发现了Timer构造。我能用这个来解决我的问题吗? 有更好的方法吗?
(编辑)该线程用于突出显示游戏板的一部分,但仅用于4秒。之后应该有2秒没有突出显示。然后4秒突出显示电路板的下一部分等。
(edit2)我无法使用睡眠,因为它冻结了我的UI。如果有人有类似的情况,这就是我如何解决它:
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);
}
}
}
答案 0 :(得分:0)
最好的方法是使用 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()的任何地方调用。