关于MotionEvent.ACTION_UP无法被响应的问题

关于MotionEvent.ACTION_UP无法被响应的问题  

2011-12-19 21:26:49|  分类: Android|字号 订阅

          今天做了一个小测试,implements OnTouchListener,想监听触屏动作

@Override  public boolean onTouchEvent(MotionEvent event) {   // TODO Auto-generated method stub   switch (event.getAction()) {   case MotionEvent.ACTION_DOWN:{    System.out.println("按下");    break;}   case MotionEvent.ACTION_UP:{    System.out.println("释放");    break;}   default:    break;   }      return super.onTouchEvent(event);  // return true;  }

结果发现ACTION.UP没有反应,上网查了好久,发现有帖这么说:
这个函数是具有有返回值的,须要返回一个布尔值。大家发现我将return super.onTouchEvent(event)注释掉了而是直接return ture。 我给同学们解释一下为什么要着么操作。onTouchEvent方法不是我们手动调用的而是系统调用的 它的返回值会直接通知系统是否回调方法。如果说在这里return false onTouchEvent方法永远不会在被回调也就是说它只能响应触摸按下操作,触摸移动事件 和触摸抬起事件永远都不会在被响应 ,log只会打印出"ACTION_DOWN"。 如果这里return super.onTouchEvent(event); 调用父类的方法来得到返回值返回 ,这样也是有问题的因为调用父类的onTouchEvent方法可能也会返回false 这样一来依然会无法响应触摸移动事件和触摸抬起事件。所以为了正确的处理触摸事件在这里我们直接return ture 这样一来就万无一失了,Log中会将所有信息都打印出来。
于是将return super.onTouchEvent(event)改为return true,果然好了!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现在Android设备上使用手指模拟鼠标单击事件,可以在触摸板上监听手指的触摸事件,并根据手指的操作实现鼠标的单击事件。 下面是一个简单的示例代码实现: ```java public class TouchpadView extends View { private float x, y; private boolean isClick; public TouchpadView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: x = event.getX(); y = event.getY(); isClick = true; break; case MotionEvent.ACTION_MOVE: if (Math.abs(event.getX() - x) > 10 || Math.abs(event.getY() - y) > 10) { isClick = false; } break; case MotionEvent.ACTION_UP: if (isClick) { // 发送鼠标单击事件 sendMouseEvent(MotionEvent.ACTION_DOWN, (int) x, (int) y); sendMouseEvent(MotionEvent.ACTION_UP, (int) x, (int) y); } break; } return true; } private void sendMouseEvent(int action, int x, int y) { long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, 0); dispatchTouchEvent(event); } } ``` 在这个示例中,我们监听了触摸板的`ACTION_DOWN`、`ACTION_MOVE`和`ACTION_UP`事件,并根据手指的操作判断是否触发鼠标单击事件。如果手指在触摸过程中移动超过了一定距离,则不触发单击事件。当手指松开时,如果没有移动过,则发送鼠标单击事件。 注意,这只是一个简单的示例,实际实现中还需要考虑更多的细节,例如多点触控、长按事件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值