在模拟的触摸事件之间进行延迟

时间:2015-02-11 13:04:22

标签: android

我正在制作一个钢琴应用程序,我需要模仿按键才能向用户显示歌曲的音符。通过使用处理程序,我可以延迟按下一个键。

但是,我无法在所有必须触摸的键之间进行延迟。我觉得这样的事情,但我只看到最后两个音符被按下并发出声音。

    final String[] keys = {"1b","2w","9b","10w","11b","12w"};
    handler = new Handler(Looper.getMainLooper());

    for(int i = 0; i < keys.length - 1; i++) {
        final int nextKey = i+1;

        //Method in which I used other handler to delay pressing up and down
        pressKey(keys[i]); 

        //Next key i would like to get pressed with a delay
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                pressKey(keys[nextKey]);
            }
        },1500);
    }

3 个答案:

答案 0 :(得分:0)

不使用for,而是使用一个可以使用指定的延迟发布自己的runnable:

new Runnable()
{
    int nextKey = 0;

    @Override
    public void run()
    {
        pressKey(keys[nextKey]);

        if (++nextKey < keys.length)
            handler.postDelayed(this, 1500);
        // else no more keys
    }
}.run();

答案 1 :(得分:0)

我整夜都想弄明白,觉得有点蠢。我只需要使用延迟创建一个变量,并在每次迭代中递增它。

答案 2 :(得分:0)

如果在pressKey方法中没有需要在UI线程中完成的工作,可以使用线程执行此操作。

new Thread(
new Runnable(){
@Override
public void run(){
    for(int i = 0; i < keys.length - 1; i++) {
         pressKey(keys[i]);
         Thread.sleep(1500);
    }
}
}
).run();