ViewPager与ListView纵向滑动冲突的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuxu820_/article/details/51374995
float start_x = 0, start_y = 0, end_x = 0, end_y = 0;
viewPager.setOnTouchListener(new View.OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				int action = event.getAction();
				if (action == MotionEvent.ACTION_DOWN) {
					// toast("down");
					// Log.i("zhuxu", "down");
					start_x = event.getX();
					start_y = event.getY();
				} else if (action == MotionEvent.ACTION_UP) {
					// toast("up");
					// Log.i("zhuxu", "up");
					end_x = event.getX();
					end_y = event.getY();
				} else if (action == MotionEvent.ACTION_MOVE) {
					// Log.i("zhuxu", "move : " + "start_x : " + start_x
					// + "start_y : " + start_y + "end_x : " + end_x
					// + "end_y : " + end_y);
					// toast("move");
					// if (Math.abs(end_x - start_x) > 50 && Math.abs(end_y -
					// start_y) < 100) {
					if (Math.abs(end_x - start_x) > Math.abs(end_y - start_y)) {
						// Log.i("zhuxu", "横向移动!");
						//此句代码是为了通知他的父View 现在进行的是本控件的操作,不要对我的操作进行干扰
						v.getParent().requestDisallowInterceptTouchEvent(true);
						return false; // 是否需要View继续处理
					} else {
						//接近垂直滑动,交给父控件处理
						v.getParent().requestDisallowInterceptTouchEvent(false);
						// Log.i("zhuxu", "纵向移动!");
						return true;  // 是否需要View继续处理
					}
				}
				return false;
			}
		});


代码如上 亲测可以解决冲突问题      大体思路就是  给ViewPager添加手势监听  如果是横向移动就拦截事件并自己处理   如果是纵向移动就转接给下一层   

描述可能不准确甚至有错误  但思路就是大体这样

猜你喜欢

转载自blog.csdn.net/zhuxu820_/article/details/51374995