今天开发碰到需要用到滑动监听的地方
我直接用 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 无法触发监听的情况下 可以试试这个