MotionEvent中定义了基本事件,View中定义了一些简单事件的处理接口,GestureDetector拓展了View中的事件接口,提供了一些复杂事件的接口。框架接口(API)的好处是框架已经帮我们定义好了为什么onDoubleClick表示双击事件,而我们只需要直接使用即可。下面通过实例说明如何使用GestureDetector类实现复杂事件。
package com.sean.gesturetest; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.widget.Toast; public class MainActivity extends Activity { private GestureDetector gesture; CharSequence onDown = "onDown Event"; CharSequence onFling = "onFling Event"; CharSequence onLongPress = "onLongPress Event"; CharSequence onScroll = "onScroll Event"; CharSequence onShowPress = "onShowPress Event"; CharSequence onSingleTapUp = "onSingleTapUp Event"; private Context mContext = this; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gesture = new GestureDetector(this, new myGestureListener() { }); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return gesture.onTouchEvent(event); } private class myGestureListener implements OnGestureListener { @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub Toast.makeText(mContext, onDown, Toast.LENGTH_SHORT).show(); return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub Toast.makeText(mContext, onFling, Toast.LENGTH_SHORT).show(); return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub Toast.makeText(mContext, onLongPress, Toast.LENGTH_SHORT).show(); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub Toast.makeText(mContext, onScroll, Toast.LENGTH_SHORT).show(); return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub Toast.makeText(mContext, onShowPress, Toast.LENGTH_SHORT).show(); } @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub Toast.makeText(mContext, onSingleTapUp, Toast.LENGTH_SHORT).show(); return false; } } }