2012-03-27 87 views

回答

3

这是否对你的工作:

public class ButtonDownListener implements OnTouchListener{ 

    boolean pressed = false; 

    public boolean onTouch(View v, MotionEvent event){ 
     if(event == MotionEvent.ACTION_DOWN){ 
      pressed = true; 
     } 
     else if(event == MotionEvent.ACTION_UP){ 
      pressed = false; 
     } 

     return true; 
    } 
} 

注册按钮:

button.setOnTouchListener(new ButtonDownListener()); 
+0

我不能得到它的工作:( – user1293780 2012-03-28 12:39:48

+0

JRaymond和我有几乎相同的建议...什么不适合你? – 2012-03-28 14:42:39

+0

现在我发现了一个解决方案,我不得不将“MotionEvent.Action_UP”更改为“ MotionEvent.1“ – user1293780 2012-03-29 11:05:07

1

像这样:

public void foo() { 
    Button mButton = (Button) findViewById(R.id.mButton) 

    mButton.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      mBoolean = true; 
      return true; 
     case MotionEvent.ACTION_UP: 
      mBoolean = false; 
      return true; 
     default: 
      return false; 
     } 
    } 
    }); 
} 

诚然有一些问题与多线程操作与上面的代码(例如,所讨论的布尔应该可能是原子等),但这是典型的实现n单触式听众。多点触控监听器为交换机增加了几个例子,但这个想法仍然是一样的。

+0

我无法实现它的工作 – user1293780 2012-03-28 12:49:02

+0

你是什么意思?不会编译?不会改变布尔值?应该受此布尔值影响的代码没有运行? – JRaymond 2012-03-28 16:44:31