按钮setPressed一段时间

时间:2013-12-09 22:52:52

标签: android

我正在尝试将按钮状态设置为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”按钮的引用。

我完全不知道从哪里开始。

3 个答案:

答案 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;
     }
     });