onTouchEvent 监测不到滑动事件

2021-09-24 11:26:12 浏览数 (1)

 我们通常会在活动里重写 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

0 人点赞