2015-02-10 66 views
0

我正在为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个音符的可能性,每个触摸事件只有一个音符。

回答

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();