项目中需要做滑动监听事件,具体如下:
做的过程中遇到点小麻烦,写了监听后无效,具体原因及解决方法请看后面
今天做的时候很莫名其妙的监听滑动事件不管用了,后来找到原因是因为布局文件中用了ScrollView,与GestureDetector冲突,解决方法是重写dispatchTouchEvent方法即可:
在找原因的时候发现布局文件中添加android:longClickable="true"对监听滑动事件也有影响,具体没仔细研究
做的过程中遇到点小麻烦,写了监听后无效,具体原因及解决方法请看后面
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"对监听滑动事件也有影响,具体没仔细研究