Android, своеобразный сценарий TouchEvent для обработки - PullRequest
1 голос
/ 10 мая 2011

Хорошо, поэтому при создании игры в свободное время я полностью застрял при попытке обойти следующий сценарий:

Я хочу записать события касания (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 мс, но он не начинает сразу обнаруживать, если мой палец все еще вниз. Он снова поднимет его, если я слегка пошевелю пальцем, а затем вернусь в состояние покоя.

Если я не включил функцию «Интервал», мое действие просто срабатывает постоянно. Будем весьма благодарны за любые идеи о том, как лучше реализовать это.

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Я мог бы представить поток синхронизации, который запускается на 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
    }
  }
}
0 голосов
/ 10 мая 2011

Экран будет нажиматься до тех пор, пока у вас не появится событие с действиями ACTION_UP или ACTION_CANCEL, поэтому я проверю обратно.

...