如何延迟模拟触摸事件?

时间:2015-02-10 20:45:59

标签: android

我正在为Android制作一个音乐应用程序,我在其中检测用户完成的ontouch事件,使按下的按键发声,并且还可以更改颜色。我想制作模拟事件以显示歌曲的音符。

我面临的问题是每次触摸事件之间没有延迟,或者至少我不知道如何正确地做到这一点。你可以听到两个音符的声音,但是你看不到它们的颜色变化。

应该怎么做?

这是我为了获得2个按键而测试过的。我也尝试过它之间的ACTION_UP,但它没有用。

//First key pressed
piano.dispatchTouchEvent(pulse.obtain(SystemClock.upTimeMillis(),SystemClock.upTimeMillis() + 1000, pulse.ACTION_DOWN,0,0,8)

//Second key pressed
piano.dispatchTouchEvent(pulse.obtain(SystemClock.upTimeMillis(),SystemClock.upTimeMillis() + 1000, pulse.ACTION_DOWN,80,0,8)

我没有考虑过同时触摸2个音符的可能性,每次触摸事件只有一个。

1 个答案:

答案 0 :(得分:0)

class Press {
  static final long PRESS_DELAY = 150;

  private final Handler handler = new Handler(Looper.getMainLooper());

  private final View view;

  Press(View view) {
    this.view = view;
  }

  void press() {
    if (view.getVisibility() != View.VISIBLE) {
      return;
    }
    view.setPressed(true);
    view.invalidate();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
        view.setPressed(false);
        view.invalidate();
      }
    }, PRESS_DELAY);
  }
}

然后,

new Press(myButton).press();