做的过程中遇到点小麻烦,写了监听后无效,具体原因及解决方法请看后面
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 > 300) { doResult(RIGHT); } else if (x < -300) { 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"对监听滑动事件也有影响,具体没仔细研究