Android GestureDetector滑动监听事件

版权所有,禁止匿名转载;禁止商业使用。

项目中需要做滑动监听事件,具体如下:


做的过程中遇到点小麻烦,写了监听后无效,具体原因及解决方法请看后面


final int RIGHT = 0;  
  final int LEFT = 1;  
  private GestureDetector gestureDetector; 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail_news_img);
    gestureDetector = new GestureDetector(NewsDetailImgActivity.this,onGestureListener);  
  private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
      Log.v(TAG, "onFling...");
      float x = e2.getX() - e1.getX();
      float y = e2.getY() - e1.getY();
      if (x > 0) {
        doResult(RIGHT);
      } else if (x < 0) {
        doResult(LEFT);
      }
      return true;
    }
  };
  public boolean onTouchEvent(MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
  }
  public void doResult(int action) {
    switch (action) {
    case RIGHT:
      Log.v(TAG, "go right");
      System.out.println("go right");
      break;
    case LEFT:
      Log.v(TAG, "go LEFT");
      System.out.println("go LEFT");
      break;
    }
  }
  }

今天做的时候很莫名其妙的监听滑动事件不管用了,后来找到原因是因为布局文件中用了ScrollView,与GestureDetector冲突,解决方法是重写dispatchTouchEvent方法即可:


@Override
  public boolean dispatchTouchEvent(MotionEvent ev) {
    // TODOAuto-generatedmethodstub
    gestureDetector.onTouchEvent(ev); // 让GestureDetector响应触碰事件
    super.dispatchTouchEvent(ev); // 让Activity响应触碰事件
    return false;
  }

在找原因的时候发现布局文件中添加android:longClickable="true"对监听滑动事件也有影响,具体没仔细研究


0 0