天天看點

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重新獲得事件