Android onTouchEvent的MotionEvent.ACTION_UP不响应

本博客同步发布于 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: down
E/ActionUpActivity: onTouch: down
E/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的相关知识,欢迎继续关注我博客的更新。

项目源代码

参考资源

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值