只有一种方法可以将onTouchListener()实现到多个按钮

时间:2016-11-14 22:14:14

标签: java android

我正在尝试仅使用一个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);

2 个答案:

答案 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()

相关问题