1

好的,所以在业余时间创建游戏时,我在尝试围绕以下场景编写代码时完全陷入困境:

我想捕获点击事件(TouchEvent.ACTION_DOWN),然后以 500 毫秒的间隔,我想检查屏幕是否仍然被按下,并无限重复相同的动作。

所以,我开始了:

switch (myTouchHandler.getAction()) {
  case (TouchEvent.ACTION_DOWN):
  case (TouchEvent.ACTION_MOVE):
    if (inputIntervalTooSoon()) return true;
    //do the magic i intend to do....
 }

....

private boolean inputIntervalTooSoon() {
        final long now = System.currentTimeMillis();
        if ((now - lastTouchEventTime) < 500) return false;
        lastTouchEventTime = now;
        return true;

这会产生它会等待 500 毫秒的效果,但它不会立即开始检测我的手指是否仍然向下。如果我稍微移动一下手指,它就会重新拾起它,然后又回到休眠状态。

如果我不包含 Interval 函数,我的动作就会不断触发。任何关于如何更好地实现这一点的想法将不胜感激。

4

2 回答 2

3

我可以想象一个在 TouchEvent.ACTION_DOWN 上启动的计时线程,它将在一个休眠 500 毫秒的循环中启动并运行。在睡眠之后,它将能够执行其检查,这将执行您的自定义处理以及检查 TouchEvent.ACTION_UP 是否发生(您必须将其记录在 EventHandler 中)。

当然,需要一些同步。

这有意义吗?

类似这样的东西:

boolean upHappened;

switch (myTouchHandler.getAction()) {
  case (TouchEvent.ACTION_DOWN):
  upHappened = false;
  new Thread(new TimerRunnable()).start();
  case (TouchEvent.ACTION_UP):
  case (TouchEvent.ACTION_CANCEL):
  upHappened = true;
}

class TimerRunnable implements Runnable {
  public void run() {
    while(true) {
      Thread.sleep(500);
      if(upHappened) break;
      //custom processing
    }
  }
}
于 2011-05-10T01:20:06.307 回答
0

屏幕将被按下,直到您有一个带有 ACTION_UP 或 ACTION_CANCEL 动作的事件,所以我会反过来检查。

于 2011-05-10T01:20:38.830 回答