我正在尝试仅使用一个onTouchListener()用于多个按钮,这是我的代码,但它不起作用。 我想要做的是当我按下按钮时,如果按下另一个按钮(向右或向左)来编写代码,如果没有按下另一个按钮来编写另一个代码。我对java很新,所以可能会有很多错误。 如果您有解决我问题的其他方法,请提供帮助!
abstract class MyTouchListener implements View.OnTouchListener{
public boolean OnTouch(View v,MotionEvent event){
switch (v.getId()){
case R.id.btnup:
switch (v.getId()){
case R.id.btnright:
mBluetooth.write("#1001#");
break;
case R.id.btnleft:
mBluetooth.write("#1002#");
break;
case R.id.btnup:
mBluetooth.write("#1000#");
break;
}
break;
case R.id.btnright:
mBluetooth.write("#0002#");
break;
case R.id.btnleft:
mBluetooth.write("#0001#");
break;
case R.id.btndown:
switch (v.getId()){
case R.id.btnright:
mBluetooth.write("#2001#");
break;
case R.id.btnleft:
mBluetooth.write("#2002#");
break;
case R.id.btndown:
mBluetooth.write("#2000#");
break;
}
}
return true; }
}}
这是按钮:
btnup=(Button)findViewById(R.id.btnup);
btndown=(Button)findViewById(R.id.btndown);
btnleft=(Button)findViewById(R.id.btnleft);
btnright=(Button)findViewById(R.id.btnright);
MyTouchListener touchListener = new MyTouchListener();
btnup.setOnTouchListener(touchListener);
答案 0 :(得分:0)
我注意到了什么:
abstract
关键字放在侦听器类中(不能创建抽象类的实例)。您在侦听器中收到的v
视图是被按下(或释放或取消)的视图。为了检测按钮Y是否同时按下按钮X,您需要使用MotionEvent
对象中的信息来告诉您事件是按下还是释放,并保持每个按钮的状态。您可以看到处理动作事件here的简单示例。还可以在MotionEvent上查看Android documentation。
答案 1 :(得分:0)
使用void setTag (Object tag)
(documentation)为每个按钮设置蓝牙命令代码,如下所示:
btnup.setTag("#1000#");
btndown.setTag("#2000#");
btnleft.setTag("#1002#");
btnright.setTag("#1001#");
而不是OnTouch
之类的东西:
public boolean OnTouch(View v,MotionEvent event) {
mBluetooth.write((String)v.getTag())
}
P.S。似乎你有错误的嵌套switch
语句。您需要分析v.getId()
和event.getAction() == MotionEvent.ACTION_UP
或类似的事情,而不是每次v.getId()
。