ViewPager in a ListView or a ScrollView[solution]

来源:互联网 发布:hr软件inuoji 编辑:程序博客网 时间:2024/06/08 10:59

        遇到解决不了的问题,第一反应就是去搜索,符合copy型的coder,大致浏览了一下,解决方案有以下几种,都是可以解决的:

        1.如果是与ScollView冲突,就实现自已的ScollView,实现代码如下:

public final class VerticalScrollView extends ScrollView{private final GestureDetector mGestureDetector;public VerticalScrollView(Context context, AttributeSet attrs){super(context, attrs);this.mGestureDetector = new GestureDetector(context, new YScrollDetector());}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev){return super.onInterceptTouchEvent(ev)&& mGestureDetector.onTouchEvent(ev);}private final class YScrollDetector extends SimpleOnGestureListener{@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY){/** * 如果我们滚动更接近水平方向,返回false,让子视图来处理它 */return (Math.abs(distanceY) > Math.abs(distanceX));}}}

        2.如果是与ListView冲突,解决方案有两种:2.1.要么实现自已的ViewPager;2.2.要么实现了自已的ViewPager,同时还要实现自已的ListView。代码实现差不多与ScrollView类似。

        以上介绍的内容网上搜索出来一大堆,大同小异,虽然自己也是copy型的coder一员,但是对于代码的编写方面要求很严格。以下是我的解决方案:

private final OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener(){@Overridepublic void onPageSelected(int position){}@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){}@Overridepublic void onPageScrollStateChanged(int state){mPager.requestDisallowInterceptTouchEvent(state != ViewPager.SCROLL_STATE_IDLE);}};

mPager.setOnPageChangeListener(mOnPageChangeListener);

0 0