本博客同步发布于 XueLong的博客

在使用OnTouchListener()方法时,发现竟然只能监听到MotionEvent.ACTION_DOWN操作,而无法监听到其他的操作,如:MotionEvent.ACTION_UPMotionEvent.ACTION_MOVE等,都监测不到。代码如下:

linearLayout.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                int action = event.getAction();                switch (action){                    case MotionEvent.ACTION_DOWN:                        Log.e(TAG, "onTouch: down");                        break;                    case MotionEvent.ACTION_UP:                        Log.e(TAG, "onTouch: up");                        break;                    case MotionEvent.ACTION_MOVE:                        Log.e(TAG, "onTouch: move");                        break;                }                return ActionUpActivity.super.onTouchEvent(event);            }        });

Log输出如下:

E/ActionUpActivity: onTouch: downE/ActionUpActivity: onTouch: downE/ActionUpActivity: onTouch: down

感觉这样写没有问题啊,但是为什么就是只能监听到MotionEvent.ACTION_DOWN呢?

In onTouchEvent, ACTION_UP doesn’t work

原来是return ActionUpActivity.super.onTouchEvent(event);实际上返回的时false,而这里如果返回false的话,Android系统将不会在通知该手势中的其他任何事件;如果想继续捕捉到其他手势事件,则这里就要返回一个true

正确写法如下:

linearLayout.setOnTouchListener(new View.OnTouchListener() {            int startX;            int startY;            @Override            public boolean onTouch(View v, MotionEvent event) {                int action = event.getAction();                switch (action){                    case MotionEvent.ACTION_DOWN:                        Log.e(TAG, "onTouch: down");                        startX = (int) event.getRawX();                        startY = (int) event.getRawY();                        Log.e(TAG,"startX: "+startX + " startY: " + startY);                        break;                    case MotionEvent.ACTION_UP:                        Log.e(TAG, "onTouch: up");                        startX = (int) event.getRawX();                        startY = (int) event.getRawY();                        Log.e(TAG,"startX: "+startX + " startY: " + startY);                        break;                    case MotionEvent.ACTION_MOVE:                        Log.e(TAG, "onTouch: move");                        int newX = (int) event.getRawX();                        int newY = (int) event.getRawY();                        int dx = newX - startX;                        int dy = newY - startY;                        Log.e(TAG,"移动的dx: "+dx + " 移动的dy: " + dy);                        //重新初始化手指的位置                        startX = (int) event.getRawX();                        startY = (int) event.getRawY();                        break;                }                // TODO: 2017/10/30 如果这里为false,则只能监听到ACTION_DOWN,其他的都监听不到                return true;//                return ActionUpActivity.super.onTouchEvent(event);            }        });

写在最后

以上就是关于,Android onTouchEventMotionEvent.ACTION_UP不响应的问题的解决方式。

如果你在参考过程中遇到问题,可以在我的联系方式中给我提问。

后面会继续介绍,Android的相关知识,欢迎继续关注我博客的更新。

项目源代码

参考资源

  • In onTouchEvent, ACTION_UP doesn’t work

转载请注明:XueLong的博客 » Android自定义图形-Shape的使用

更多相关文章

  1. Android实现EventBus登录界面与传值(粘性事件)
  2. Android输入设备处理流程
  3. Android(安卓)自定义 View——手势密码
  4. Android实现自定义view---绘制图片
  5. Android(安卓)按钮响应点击事件的三种实现方式
  6. Android(安卓)Monkey
  7. Android输入输出机制之来龙去脉
  8. android sendevent模拟滑动点击事件
  9. android中使用SAX, DOM, 或者pull 来解析XML文档

随机推荐

  1. Android获取其他包的Context实例然后干坏
  2. android animation中的参数interpolator
  3. LinearLayout && RelativeLayout 常用属
  4. Android安装步骤
  5. Android中打开新的Activity的三种方法
  6. 【Android】使用SharedPreferences判断应
  7. android键盘挡住界面
  8. 为什么 Android(安卓)手机总是越用越慢
  9. Android adb input 命令介绍
  10. Android Native Browser下载存储路径选择