前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >onTouchEvent 监测不到滑动事件

onTouchEvent 监测不到滑动事件

作者头像
圆号本昊
发布2021-09-24 11:26:12
9540
发布2021-09-24 11:26:12
举报
文章被收录于专栏:github@hornhuang

 我们通常会在活动里重写 onTouchEvent() 方法,来监听滑动事件,如下:

代码语言:javascript
复制
@Override
public boolean onTouchEvent(MotionEvent event) {
    Toast.makeText(MainActivity.this, "slipe", Toast.LENGTH_SHORT).show();
    //继承了Activity的onTouchEvent方法,直接监听点击事件
    if(event.getAction() == MotionEvent.ACTION_DOWN) {
        //当手指按下的时候
        x1 = event.getX();
        y1 = event.getY();
    }
    if(event.getAction() == MotionEvent.ACTION_UP) {
        //当手指离开的时候
        x2 = event.getX();
        y2 = event.getY();
        if(y1 - y2 > 50) {
            Toast.makeText(MainActivity.this, "向上滑", Toast.LENGTH_SHORT).show();
            floatingActionsMenu.animate().translationY(-100);
        } else if(y2 - y1 > 50) {
            Toast.makeText(MainActivity.this, "向下滑", Toast.LENGTH_SHORT).show();
            floatingActionsMenu.animate().translationY(0);
        } else if(x1 - x2 > 50) {
            Toast.makeText(MainActivity.this, "向左滑", Toast.LENGTH_SHORT).show();
        } else if(x2 - x1 > 50) {
            Toast.makeText(MainActivity.this, "向右滑", Toast.LENGTH_SHORT).show();
        }
    }
    return super.onTouchEvent(event);
}

但是我们有时却发现监听不到滑动事件


这大多数是因为使用了滑动控件,因为子 view 有消费 touch 事件,所以我们的滑动监听会被拦截,所以在这里我们建议使用 dispatchTouchEvent() 方法进行代替:

代码语言:javascript
复制
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Toast.makeText(MainActivity.this, "slipe", Toast.LENGTH_SHORT).show();
    //继承了Activity的onTouchEvent方法,直接监听点击事件
    if(ev.getAction() == MotionEvent.ACTION_DOWN) {
        //当手指按下的时候
        x1 = ev.getX();
        y1 = ev.getY();
    }
    if(ev.getAction() == MotionEvent.ACTION_UP) {
        //当手指离开的时候
        x2 = ev.getX();
        y2 = ev.getY();
        if(y1 - y2 > 50) {
            Toast.makeText(MainActivity.this, "向上滑", Toast.LENGTH_SHORT).show();
            floatingActionsMenu.animate().translationY(-1000);
        } else if(y2 - y1 > 50) {
            Toast.makeText(MainActivity.this, "向下滑", Toast.LENGTH_SHORT).show();
            floatingActionsMenu.animate().translationY(0);
        } else if(x1 - x2 > 50) {
            Toast.makeText(MainActivity.this, "向左滑", Toast.LENGTH_SHORT).show();
        } else if(x2 - x1 > 50) {
            Toast.makeText(MainActivity.this, "向右滑", Toast.LENGTH_SHORT).show();
        }
    }
    return super.dispatchTouchEvent(ev);
}


项目实例:

https://github.com/FishInWater-1999/Android-HLJU-Navigation

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档