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 > 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"对监听滑动事件也有影响,具体没仔细研究

猜你喜欢

转载自geoffrey-qiao.iteye.com/blog/2181394