1

我有一个支持多点触控的项目。当您触摸一个按钮时,它会传递 1。但是,它只获得第一次 touch 。请帮助我,这是为了我们的论文。

这是我的代码:

 public boolean onTouch(View v, MotionEvent event) {
     int action = event.getActionMasked();
     if(action == MotionEvent.ACTION_DOWN){

       b1=b2=b3=b4=b5=b6="0";

        switch(v.getId()) {
           case R.id.button3:
               b3 = "1";
               break;
           case R.id.button2:
                b2 = "1";
                break;
           case R.id.button1:
               b1 = "1";
               break;
           case R.id.button4:
               b4 = "1"; 
               break;
           case R.id.button5:
               b5 = "1";
               break;
           case R.id.button6:
               b6 = "1";   

        }
     }  else if(action == MotionEvent.ACTION_POINTER_DOWN )
     { 
         switch(v.getId()) {
           case R.id.button3:
               b3 = "1";
               break;
           case R.id.button2:
                b2 = "1";
                break;
           case R.id.button1:
               b1 = "1";
               break;
           case R.id.button4:
               b4 = "1"; 
               break;
           case R.id.button5:
               b5 = "1";
               break;
           case R.id.button6:
               b6 = "1";   

        }
    }
  }

在这里,当按下 button1 和 button2 时,它应该传递 b1=1 和 b2=1,但它只传递 b1=1。

4

2 回答 2

2

返回true表示您处理了触摸事件。

此外,使用字符串(b1through b6)作为布尔值显然是个坏主意。改用 a boolean

于 2012-09-28T02:09:09.040 回答
1

您的触摸侦听器的问题(假设所有按钮都调用同一个方法)是每次您进入该方法时它都会重置值,并且onTouch()会为您需要处理的每个事件调用一次。在您触摸通过同一个侦听器的两个唯一按钮的示例中,该方法将被调用一次,并带有ACTION_DOWN您触摸的第一个按钮的事件,然后第二次带有ACTION_DOWN您触摸的第二个按钮的事件。您第二次运行该方法会将所有bx输入的值重置为零,然后再设置与该视图关联的值,因此此代码将始终仅将一个按钮“标记”为已触摸。

ACTION_UP您可能会考虑为该视图重置和事件上的“标记”状态,ACTION_CANCEL以保持更好的全局状态。我也同意其他发帖者的观点,即将这些值存储为字符串似乎效率很低,并且以后比较逻辑会变得更加困难。

于 2012-09-28T03:18:50.627 回答