版权声明:本文为博主原创文章,未经博主允许不得转载。 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添加手势监听 如果是横向移动就拦截事件并自己处理 如果是纵向移动就转接给下一层
描述可能不准确甚至有错误 但思路就是大体这样