我正在制作一个钢琴应用程序,我需要模仿按键才能向用户显示歌曲的音符。通过使用处理程序,我可以延迟按下一个键。
但是,我无法在所有必须触摸的键之间进行延迟。我觉得这样的事情,但我只看到最后两个音符被按下并发出声音。
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);
}
答案 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();