我有一个支持多点触控的项目。触摸按钮时,它会通过1.但是,它只会触及第一次触摸。请帮助我,这是我们的论文。
这是我的代码:
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.
答案 0 :(得分:2)
返回true
表示您已处理了触摸事件。
此外,使用字符串(b1
到b6
)作为布尔值是一个明显不好的主意。请改用boolean
。
答案 1 :(得分:1)
触摸侦听器的问题(假设所有按钮都调用相同的方法)是每次进入方法时重置值,onTouch()
将为您需要的每个事件调用一次处理。在您触摸通过同一个侦听器的两个唯一按钮的示例中,对于您触摸的第一个按钮,该方法将调用一次ACTION_DOWN
事件,然后第二次调用ACTION_DOWN
事件你触摸的第二个按钮。在设置与该视图关联的值之前,第二次运行该方法会将所有bx
输入的值重置为零,因此此代码将始终只将“标记”的一个按钮保留为触摸。
您可以考虑重置该视图的ACTION_UP
和ACTION_CANCEL
事件的“标记”状态,以保持更好的全局状态。我也同意其他海报,将这些值存储为字符串似乎非常低效,并且以后会使比较逻辑变得更加困难。