按住并释放按钮在android中无效

时间:2017-07-20 12:37:38

标签: button ontouchlistener ontouchevent motionevent

我在android中有一个按钮。如果我按住按钮应该发送消息,同时发布另一条消息应该去但有时仍然按住按钮也发布正在发布并且发布消息正在进行。

这是我的按钮代码: -

open_curtain.setOnTouchListener(new View.OnTouchListener() {
                              @Override
                              public boolean onTouch(View v, MotionEvent event) {

                                  switch (event.getAction() & MotionEvent.ACTION_MASK) {


                                          case MotionEvent.ACTION_DOWN:

                                             v.setSelected(true);

                                              DeviceDataClassTwo obj = (DeviceDataClassTwo) v.getTag();
                                              new ButtonOPressed(obj).execute();


                                              break;

                                          case MotionEvent.ACTION_UP:
                                           case MotionEvent.ACTION_CANCEL:
                                              //it comes here when i move my finger more then 100 pixels
                                               v.setSelected(false);


                                                  obj = (DeviceDataClassTwo) v.getTag();
                                                  new ButtonORelease(obj).execute();

                                              Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                                              vibe.vibrate(140);

                                              break;



                                  }

                                  return true;
                              }
                          });

1 个答案:

答案 0 :(得分:0)

在你发布的鳕鱼中你有一个错误,两个“切换”的情况没有正确分开。

你应该改变这个:

case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
    .
    .
    .
    break;

以下内容:

case MotionEvent.ACTION_UP:
    break;
case MotionEvent.ACTION_CANCEL:
    .
    .
    .
    break;

如果您要离开案例“MotionEvent.ACTION_UP”,请考虑将其移至“默认”案例。然后“开关”应如下所示:

switch (event.getAction() & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
        .
        .
        .
        break;
    case MotionEvent.ACTION_CANCEL:
        .
        .
        .
        break;
    default:
        break;