先扯两句
首先声明,这篇博客解决方案取自skylarklxlong的Android onTouchEvent的MotionEvent.ACTION_UP不响应
PS:不知道大家是否还记得之前写的Android知识点:触碰事件监听中横纵坐标的获取方法:getX和getRawX的区别、触碰事件监听中按下动作:ACTION_DOWN 和ACTION_POINTER_DOWN区别,介绍的都是onTouchEvent的监听,而其实这两个效果想要使用,其实都离不开今天的内容——MotionEvent.ACTION_UP不响应。
其实不只是MotionEvent.ACTION_UP,更具体来说,今天博客的内容实际上应该是除了MotionEvent.ACTION_DOWN以外,其他的都不会响应。若是其他情况请绕行,这篇博客也帮不了你。
先提供一下Android知识点——目录的链接,然后让我们进入正题。
正文
首先我们还是看一下最典型的触碰事件:
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i(getName(), "按下了");
break;
case MotionEvent.ACTION_MOVE:
Log.i(getName(), "移动了");
break;
case MotionEvent.ACTION_UP:
Log.i(getName(), "抬起了");
break;
}
return true;
}
});
这部分代码想必使用过OnTouchListener的都不会陌生,不知大家对于其中哪个部分,我却是对“return true;”的疑问最大,为什么是true而不是false呢?其实如果创建的时候可以看到,系统默认生成的就是“return false”,但是只要我们去网上搜索OnTouchListener的相关博客的时候,十有八九都是返回“return true;”。而如果你很幸运,找到的是“return false”的,那么恭喜你,这篇博客你就用得上了。
原来是return ActionUpActivity.super.onTouchEvent(event);实际上返回的时false,而这里如果返回false的话,Android系统将不会在通知该手势中的其他任何事件;如果想继续捕捉到其他手势事件,则这里就要返回一个true。
因此可以理解onTouch方法的返回值,就是是否继续监听后续操作。true表示继续,所以监听到MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP;false表示不继续,所以只监听MotionEvent.ACTION_DOWN一个事件,则结束监听。
网友评论