首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

ListView嵌入ViewPager等横向滚动控件矛盾的终究解决方案

2014-01-22 
ListView嵌入ViewPager等横向滚动控件冲突的终究解决方案? ? ?ListView嵌入ViewPager等横向滚动控件,会导

ListView嵌入ViewPager等横向滚动控件冲突的终究解决方案

? ? ?ListView嵌入ViewPager等横向滚动控件,会导致ViewPager左右拨动和ListView手势冲突。按经验(Gallery中的子视图处理Click事件)只要比对滑动的X坐标大于Y坐标,就交由ViewPager处理,应该是个简单的问题。实际search到的比较火方案的思路是用SimpleOnGestureListener的onScroll回调中判断X、Y坐标拨动绝对值是否拦截,不过这个到处转载的方案是有很多问题的(比如拨动不灵敏、上下拨有问题),那些转载的是脑子被炉踢了吗?

? ?最后在stackoverflow看到一个解决方法,思路除了考虑X、Y坐标还考虑到了down、move事件的配合,比较靠谱结果试试效果不错。下面是核心代码,完整实现请参考附件(这种实现可以同样可以处理ListView嵌入ViewFlow、ViewFlipper、HorizontalScrollView等需要横向滚动的控件)

@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN :mDX = mDY = 0f;mLX = ev.getX();mLY = ev.getY();break;case MotionEvent.ACTION_MOVE :final float X = ev.getX();final float Y = ev.getY();mDX += Math.abs(X - mLX);mDY += Math.abs(Y - mLY);mLX = X;mLY = Y;if (mIntercept && mLastAct == MotionEvent.ACTION_MOVE) {return false;}if (mDX > mDY) {mIntercept = true;mLastAct = MotionEvent.ACTION_MOVE;return false;}}mLastAct = ev.getAction();mIntercept = false;return super.onInterceptTouchEvent(ev);}

?

热点排行