萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> Android手勢識別簡單封裝類

Android手勢識別簡單封裝類

   在做一個項目時用到了簡單的手勢功能(向左,向右滑切屏),於是簡單地封裝了下

  import android.content.Context;

  import android.util.DisplayMetrics;

  import android.view.GestureDetector;

  import android.view.GestureDetector.OnGestureListener;

  import android.view.MotionEvent;

  public class GestureHelper implements OnGestureListener {

  private GestureDetector gesture_detector;

  private int screen_width;

  private OnFlingListener listener_onfling;

  public static abstract class OnFlingListener {

  public abstract void OnFlingLeft();

  public abstract void OnFlingRight();

  }

  public GestureHelper(Context context) {

  DisplayMetrics dm = context.getResources().getDisplayMetrics();

  screen_width = dm.widthPixels;

  gesture_detector = new GestureDetector(context, this);

  }

  public void setOnFlingListener(OnFlingListener listener) {

  listener_onfling = listener;

  }

  public boolean onTouchEvent(MotionEvent event) {

  return gesture_detector.onTouchEvent(event);

  }

  @Override

  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

  // 觸發條件 :

  // X軸的坐標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒

  final int FLING_MIN_DISTANCE = (int) (screen_width / 3.0f), FLING_MIN_VELOCITY = 200;

  if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

  listener_onfling.OnFlingLeft();

  } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

  listener_onfling.OnFlingRight();

  }

  return true;

  }

  @Override

  public boolean onDown(MotionEvent e) {

  return false;

  }

  @Override

  public void onLongPress(MotionEvent e) {

  }

  @Override

  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,

  float distanceY) {

  return false;

  }

  @Override

  public void onShowPress(MotionEvent e) {

  }

  @Override

  public boolean onSingleTapUp(MotionEvent e) {

  return false;

  }

  }

  使用方法如下:

  public class TestActivity extends Activity {

  private GestureHelper gh;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_start);

  gh = new GestureHelper(this);

  gh.setOnFlingListener(new OnFlingListener() {

  @Override

  public void OnFlingLeft() {

  //向左滑動

  }

  @Override

  public void OnFlingRight() {

  //向右滑動

  }

  });

  }

  @Override

  public boolean onTouchEvent(MotionEvent event) {

  return gh.onTouchEvent(event);

  }

  }

copyright © 萬盛學電腦網 all rights reserved