不要重复造轮子。 很多控件都为我们提供了双击等事件的处理。但还是有一部分控件没用提供较好的帮助。 那么我们就可以使用GestureDetector来弥补此处的不足。 尽量不要自己去重复实现双击等事件。 因为这样你会损失掉一部分内容。
步骤:
1. 在onCreate 方法中去创建
mGestureDetector = new GestureDetector(this, new MyGestureListener());
2. 把普通的触摸事件,抛给GestureDetector来处理
控件.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //采用手势来处理 return this.gestureDetector.onTouchEvent(event); } });
3. 实现自己的GestureDetector,完成代码:MyGestureListener。
下面就要介绍一怎样扩展MyGestureListener来实现我们的功能需求。
1. 双击事件:
gestureDetector.setOnDoubleTapListener(new OnDoubleTapListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { return false; } @Override public boolean onDoubleTapEvent(MotionEvent e) { return false; } @Override public boolean onDoubleTap(MotionEvent e) { //事件处理,普通是双击都是这么干的。 return false; } });
2. 水平移动,判断是水平移动还是垂直移动的事件。
@Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if(Math.abs(e1.getX() - e2.getX()) - Math.abs(e1.getY() - e2.getY()) > 0) { Toast.makeText(NewViewActivity.this, "xxxx", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(NewViewActivity.this, "yyyy", Toast.LENGTH_SHORT).show(); } return false; }