需求:判断是向左滑动还是向右滑动
package com.jiangtea.gesturedemo; import android.os.Bundle; import android.support.v4.view.GestureDetectorCompat; import android.support.v7.app.AppCompatActivity; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.GestureDetector.OnGestureListener; import android.view.GestureDetector.SimpleOnGestureListener; public class MainActivity extends AppCompatActivity { protected static final String TAG = "MainActivity"; //private GestureDetector mDetector; //已过时 private GestureDetectorCompat mDetector; //v4包的类,能支持更低的版本 //滑动事件的最小滑动距离 private float FLING_DISTANCE_MIN; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 手势监听器 SimpleOnGestureListener mDetector = new GestureDetectorCompat(this, mListener); //获取屏幕宽信息 DisplayMetrics metrics = getResources().getDisplayMetrics(); int screenWidth = metrics.widthPixels;//屏幕宽 FLING_DISTANCE_MIN = screenWidth / 4; //屏幕宽的1/4为滑动最小距离 Log.d(TAG, "FLING_DISTANCE_MIN = " + FLING_DISTANCE_MIN); //另一种获取屏幕宽高的方法 //getWindowManager().getDefaultDisplay().getWidth(); } // 监听触摸事件 @Override public boolean onTouchEvent(MotionEvent event) { // 手动调用监听器的onTouchEvent mDetector.onTouchEvent(event); return super.onTouchEvent(event); } // 手势监听器 private OnGestureListener mListener = new SimpleOnGestureListener() { // 滑动事件,内部自己做了一些判断,滑动距离过小则不会回调 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // (MotionEvent e1 按下的位置信息, MotionEvent e2 手指抬起的位置信息, floatvelocityX x轴方向上的滑动速度 // x与rawX的区别,x是相对于控件父节点的坐标,rawX是相对于手机屏幕的坐标 float x1 = e1.getRawX(); float y1 = e1.getRawY(); float x2 = e2.getRawX(); float y2 = e2.getRawY(); Log.d(TAG, "onFling(), e1(" + x1 + "," + y1 + "), e2(" + x2 + ","+ y2 + ")"); //计算滑动距离 float offsetX = Math.abs(x2 - x1); float offsetY = Math.abs(y2 - y1); if (offsetX < FLING_DISTANCE_MIN) { Log.w(TAG, "滑动距离太小,不处理!"); return false; } if (offsetY > offsetX) { Log.w(TAG, "滑动倾斜度太大,不处理!"); return false; } //判断滑动方向 if (x2 > x1) { //向右滑动 Log.d(TAG, "向右滑动"); }else{ //向左滑动 Log.d(TAG, "向左滑动"); } return false; } }; }