我正在尝试将按钮状态设置为press = true onTouch,然后在一段时间后将其设置回按下= false。
onTouch方法正确地将状态设置为按下
myTouchListener= new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
lastPressed = (Button)v;
lastPressed.setPressed(true);
return true;
}
};
然后我想我可以使用计时器将其设置回原始状态。但是一个定时器需要一个TimerTask,它需要一个runnable,所以我不能传递它对“lastPressed”按钮的引用。
我完全不知道从哪里开始。
答案 0 :(得分:1)
其实非常简单,
创建一个指向同一个按钮的最终变量,然后你可以在一个线程中使用它,
所以启动一个新的线程,在一段时间后将其设置为假:
myTouchListener= new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
lastPressed = (Button)v;
lastPressed.setPressed(true);
final Button lp = lastPressed;
Thread t = new Thread()
{
public void run()
{
try
{
Thread.sleep(1000); //your time in milliseconds here
} catch (Exception e) { }
lp.setPressed(false);
}
}
t.start();
return true;
}
};
答案 1 :(得分:0)
使用消息处理程序,并在重置按钮状态时将计时器任务中的消息发送回您的活动。
注意:已知TimerTask的实际时序对于许多应用来说太不准确了。
更好的方法是在不使用TimerTask的情况下,在您的活动中设置消息处理程序。然后,在将按钮状态设置为按下后,您的活动可以将延迟消息发布到自身,以在将来的所需时间重新设置按钮状态。
答案 2 :(得分:0)
尝试使用onTouchEvent控制按钮的状态。
这是示例代码:
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// show interest in events resulting from ACTION_DOWN
if(event.getAction()==MotionEvent.ACTION_DOWN) return true;
// don't handle event unless its ACTION_UP so "doSomething()" only runs once.
if(event.getAction()!=MotionEvent.ACTION_UP) return false;
doSomething();
button.setPressed(true);
return true;
}
});