android 滑动监听

今天开发碰到需要用到滑动监听的地方
我直接用 GestureDetector.OnGestureListener开搞 然后一波操作猛如虎 最后 …

在这里先介绍下GestureDetector;

GestureDetector:

GestureDetector中Detector的意思就是探测者,所以GestureDetector就是用来监听手势的发生。它内部有3个Listener接口,用来回调不同类型的触摸事件,用一个简略的类图来显示:
在这里插入图片描述
里面这些接口的方法,就是相应触摸事件的回调,实现了这些方法,就能实现传入触摸事件之后做出相应的回调。这里我就不详细介绍了 下次有机会再说

继续上面的话题 使用 GestureDetector.OnGestureListener 写完后发现没用触发 查了一波代码 也没发现哪里有错误 后来我查了波资料 换了一种写法
用GestureDetector.SimpleOnGestureListener给弄出来了 直接上代码吧:
首先 你当前的activity实现OnTouchListener

//这是一个监听
Activity implements View.OnTouchListener

考虑到用户可能不小心滑到屏幕的情况 定义个值 滑动的最小距离

    private static final int FLING_MIN_DISTANCE = 50;   //最小距离

接着 定义个GestureDetector.SimpleOnGestureListener实现滑动监听

    GestureDetector.SimpleOnGestureListener myGestureListener = new GestureDetector.SimpleOnGestureListener() {
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            float x = e1.getX() - e2.getX();
            float x2 = e2.getX() - e1.getX();
            float y = e1.getY() - e2.getY();
            float y2 = e2.getY() - e1.getY();
//            判断滑动距离是否大于所设置的最小滑动距离
            if (x > FLING_MIN_DISTANCE) {
                Toast.makeText(WebActivity.this, "向左手势", Toast.LENGTH_SHORT).show();
            } else if (x2 > FLING_MIN_DISTANCE) {
                Toast.makeText(WebActivity.this, "向右手势", Toast.LENGTH_SHORT).show();
            } else if (y > FLING_MIN_DISTANCE) {
                Toast.makeText(WebActivity.this, "向上手势", Toast.LENGTH_SHORT).show();
            } else if (y2 > FLING_MIN_DISTANCE) {
                Toast.makeText(WebActivity.this, "向下手势", Toast.LENGTH_SHORT).show();
            }

            return false;
        }
    };

GestureDetector.SimpleOnGestureListener 里面有很多的方法 我们这里只需要onFling()方法 所以其他的我就不写出来了 onFling()中有四个参数
e1:是滑动的起点(手指摁下去的点)
e2:是滑动的终点(手指离开屏幕的点)
velocityX:是X轴滑动的速度(左右滑动的速度)
velocityY:是Y轴滑动的速度(上下滑动的速度)

接下来就是把这个监听设置到你的view中了
在onCreate中进行设置

    GestureDetector mGestureDetector;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mGestureDetector = new GestureDetector(this, myGestureListener);
        mRelativeLayout mRelativeLayout = findViewById(R.id.layout);//你需要监听的view
        mRelativeLayout.setOnTouchListener(this);//将主容器的监听交给本activity,本activity再交给mGestureDetector
        mRelativeLayout.setLongClickable(true);   //必需设置这为true 否则也监听不到手势

    }

最后在上面实现的OnTouchListener的方法中把监听交个mGestureDetector

  //设置监听交个mGestureDetector
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        return mGestureDetector.onTouchEvent(motionEvent);
    }

到这里就结束了 代码不多 在使用GestureDetector.OnGestureListener 无法触发监听的情况下 可以试试这个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值