天天看点

Android Listview嵌套viewpager 滑动冲突解决

能够解决listview嵌套viewpager之后 滑动不流畅的问题

这是引用别人的代码,用在我的项目中刚好能解决问题,只需要对一些值进行改变就可以了

public class MyViewPager extends ViewPager {

	private float xDown;// 记录手指按下时的横坐标。
	private float xMove;// 记录手指移动时的横坐标。
	private float yDown;// 记录手指按下时的纵坐标。
	private float yMove;// 记录手指移动时的纵坐标。
	private boolean viewpagersroll = false;// 当前是否是viewpager滑动

	public MyViewPager(Context context) {
		super(context);
	}

	public MyViewPager(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		if (ev.getAction() == MotionEvent.ACTION_DOWN) {
			// 记录按下时的位置
			xDown = ev.getRawX();
			yDown = ev.getRawY();
		} else if (ev.getAction() == MotionEvent.ACTION_MOVE) {
			xMove = ev.getRawX();
			yMove = ev.getRawY();

			if (viewpagersroll) {
				// viewpager自己处理滑动效果
				getParent().requestDisallowInterceptTouchEvent(true);
				return super.dispatchTouchEvent(ev);
			}

			// 这里的动作判断是Viewpager滑动,ListView不滑动
			if (Math.abs(yMove - yDown) < 20 && Math.abs(xMove - xDown) > 5) {
				viewpagersroll = true;
			} else {
				// 由父容器listview来处理滑动效果
				return false;
			}

		} else if (ev.getAction() == MotionEvent.ACTION_UP) {
			viewpagersroll = false;
		}

		return super.dispatchTouchEvent(ev);
	}

}
           

当横向滑动的时候  viewpager拦截了事件  当上下滑动的时候  listview重新获得事件