我们通常会在活动里重写 onTouchEvent() 方法,来监听滑动事件,如下:
@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() 方法进行代替:
@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);
}
项目实例: