Android,奇特的TouchEvent场景来处理

时间:2011-05-10 01:08:33

标签: android ontouchlistener ontouchevent

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

我想捕捉点击事件(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功能,我的动作就会不断激发。如何更好地实现这一点的任何想法将不胜感激。

2 个答案:

答案 0 :(得分:3)

我可以想象一个在TouchEvent.ACTION_DOWN上启动的Timing线程,它将在一个休眠500ms的循环内启动并运行。在睡眠之后,它将能够执行其检查,这将执行您的自定义处理以及检查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
    }
  }
}

答案 1 :(得分:0)

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