SlidingMenu+ViewPage+ViewPage嵌套(类似网易 ) 滑动时冲突问题解决

本文详细解析了滑动视图如何通过onInterceptTouchEvent方法实现触摸事件拦截,包括事件处理流程和关键逻辑。

SlidingView onInterceptTouchEvent代码

public boolean onInterceptTouchEvent(MotionEvent ev) {
		System.out.println("SlidingView onInterceptTouchEvent");
	
		final int action = ev.getAction();
		final float x = ev.getX();
		final float y = ev.getY();

		switch (action) {
		case MotionEvent.ACTION_DOWN:
			mIsAlreadySetViewState = false;
			mLastMotionX = x;
			mLastMotionY = y;
			mIsBeingDragged = false;
			break;

		case MotionEvent.ACTION_MOVE:
			final float dx = x - mLastMotionX;
			final float xDiff = Math.abs(dx);
			final float yDiff = Math.abs(y - mLastMotionY);
			if(askChild(this,ev,  dx)){
			      return false;
			}
			if (xDiff > mTouchSlop && xDiff > yDiff) {
				mIsBeingDragged = true;
				mLastMotionX = x;
			}
			break;

		}
		return mIsBeingDragged;
	}
ViewPage  onInterceptTouchEvent代码

@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		System.out.println("MyViewPage onInterceptTouchEvent");
		System.out.println(ev.getY()+"a");
		if(ev.getY()<320){
			System.out.println("ev.getY()<320");
			getParent().requestDisallowInterceptTouchEvent(true);  
			return false;//true viewPage可以使用
		}
		final int action = ev.getAction();
		final float x = ev.getX();
		switch (action) {
			case MotionEvent.ACTION_DOWN:
				mLastMotionX = x;
				break;
			case MotionEvent.ACTION_MOVE:
				final float dx = x - mLastMotionX;
				System.out.println(ev.getY()+"b");
				if(/*dx>0&&*/getCurrentItem()==0) {
					System.out.println("getCurrentItem()==0");
					System.out.println(ev.getY()+"a");
					if(ev.getY()<320){
						System.out.println("ev.getY()<320");
						getParent().requestDisallowInterceptTouchEvent(true);  
						return false;//true viewPage可以使用
					}
					else{
						if(dx>0)
						return false;
					}
				}
				break;
		}
		return true;
	}
用于图片展示的ViewPage  不需要重写
完整代码 http://download.youkuaiyun.com/detail/lj102800/7028939
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值