GestureDetector.SimpleOnGestureListener 回调无效的坑

GestureDetector是android项目中用于处理手势的类,它的介绍和用法网上资料一大堆,我这边就不说明了。今天写这个文章主要是记录一下使用过程中的一个坑,下面进入正题:

网上很多资料教我们的用法如下:

public class MyGestureDetector extends GestureDetector.SimpleOnGestureListener{

        @Override
        public boolean onDown(MotionEvent e) {
            Log.d(TAG, "onDown");
            return false;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            Log.d(TAG, "onSingleTapUp");
            return true;
        }

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            Log.d(TAG, "onSingleTapConfirmed");
            return true;
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.d(TAG, "onDoubleTap");
            return true;
        }

        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {
            Log.d(TAG, "onDoubleTapEvent");
            return true;
        }
    }
    mGestureDetector = new GestureDetector(this, new MyGestureDetector());
        textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                return mGestureDetector.onTouchEvent(motionEvent);
            }

        });

上面是在一个Activity里的使用代码片段,然而发现除了onDown(MotionEvent e)会回调以外,其他方法都不会回调,而如果重写Activity的onTouchEvent方法,如下:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        return mGestureDetector.onTouchEvent(event);
    }

这样MyGestureDetector 里的方法都会回调了。问题就出在单独给控件设置setOnTouchListener监听的时候onTouch的回调,不能直接返回mGestureDetector.onTouchEvent(motionEvent),而应该像下面这样写:

textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                mGestureDetector.onTouchEvent(motionEvent);
                return true;
            }

        });

好了,这是个比较简单的小问题,只是写下来记录一下。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值