我正在做我的小项目。我只想在我的APP中设置4个按钮,按下按钮,我应该继续做同样的事情直到我松开按钮。 (例如,我需要使用这4个按钮来控制我的机器的方向。)
我一直在尝试几种不同的方法,例如onTouch。但是,在这个方法中,我需要保持稍微移动我的手指,以便我可以继续做同样的事情。否则,它会停止。也适用于onlongClicklistener和setpressed为true。他们都没有我想要的东西。
有谁能告诉我我可以调用哪些方法或实现这个的逻辑?非常感谢! :)
答案 0 :(得分:2)
你可以在点击监听器上设置正常,并在里面启动一个线程,计时器,后台任务或其他会定期检查你的按钮是否被按下的东西。
例如,你可以这样做:
final Button yourButton = (Button) view.findViewById(R.id.your_button);
long timerInterval = 1000; //one second
yourButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (yourButton.isPressed()) {
// do something (executing your code on button being pressed)
} else {
t.cancel();
}
}
}, 0, timerInterval);
}
});
这将按下按钮每秒执行你的代码。
重要提示:这提供了一般性的想法,请记住,匿名TimerTask
类将保留对yourButton
实例的强引用,该实例可能会泄漏。您应该使用your_button
引用,这将被"垃圾收集"如果View
被销毁,并且在TimerTask
内,您应该检查yourButton
是否null
。
答案 1 :(得分:1)
我认为onTouchListerner
最适合您的要求。使用线程来完成工作。在事件ACTION_DOWN
上启动线程并在事件ACTION_UP
上停止线程。
((Button) findViewById(R.id.leftBtn)).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
// start the thread
return true;
} else if(event.getAction() == MotionEvent.ACTION_UP){
// stop the thread
return true;
}
return false;
}
});
希望这会对你有所帮助。