当用户触摸屏幕的时候,会产生许多手势,如:down、up、scroll、filing等。
View类有一个 View.OnTouchListener 接口,通过重写他的onTouch()方法,我们可以处理一些触摸事件。但是这个方法太过简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦,因为我们要自己根据用户触摸的轨迹去判断是什么手势。
Android sdk给我们提供了 GestureDetector 类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成对不同手势的识别。虽然 GestureDetector 能识别手势,但是不同的手势要怎么处理,应该是程序员来具体实现的。
因此 GestureDetector 类对外提供了两个接口 ( OnGestureListener,OnDoubleTapListener ) 和一个内部类 ( SimpleOnGestureListener ) 。
1、GestureDetector.SimpleOnGestureListener
SimpleOnGestureListener 是GestureDetector的一个内部类。
程序员可以继承 SimpleOnGestureListener 类,然后重写里面的手势处理方法。
DEMO
public class MainActivity extends Activity {
private GestureDetector mGestureDetector; //设置手势探测器
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//调用GestureDetector的构造方法,将要识别的对象和处理手势的方法传递进去。
mGestureDetector = new GestureDetector(this, new MyGestureListener());
}
@Override
public boolean onTouchEvent(MotionEvent event) { //View的子类都重写了onTouchEvent,用于处理手机屏幕的触摸事件。
if (mGestureDetector.onTouchEvent(event))
return true; //当mGestureDetector处理了该事件,且不希望其他回调方法再处理该事件,则返回true。
else
return false; //其他回调方法仍然可以处理该事件
}
<pre name="code" class="java" style="line-height: 25.1875px;"><span style="white-space:pre"> </span>//SimpleOnGestureListener是GestureDetector的一个内部类,所以这里是 extends 。
class MyGestureListener extends GestureDetector.SimpleOnGestureListener{ @Override public boolean onSingleTapUp(MotionEvent
ev) { return true; } @Override public void onShowPress(MotionEvent ev) { } @Override public void onLongPress(MotionEvent ev) { } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return true; } @Override
public boolean onDown(MotionEvent ev) { Log.d("DEBUG","onDown"); return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.d("DEBUG","onFling"); return true; } }}