private void initViewPager(View root) { mViewPager = (CatchTouchViewPager) root.findViewById(R.id.content); mViewPager.setOnTouchListener( new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mItemHScrollView.touchDown(); break; case MotionEvent.ACTION_UP: mItemHScrollView.touchUp(); break; } return false; } }); mViewPager.setOnPageChangeListener( new ViewPager.OnPageChangeListener() { float lastOffset; boolean isScrolling = false; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // if (Math.abs(lastOffset - positionOffset) < 0.005f) return; if (lastOffset == 0) { lastOffset = positionOffset; return; } boolean toRight = false; if (lastOffset > positionOffset) { // to right toRight = true; } else { toRight = false; } mItemHScrollView.onPageScrolled(position, convert(positionOffset), toRight); lastOffset = positionOffset; } @Override public void onPageSelected(int position) { LogUtils.D("onPageSelected " + position); mItemHScrollView.setSelectedItem(position); lastOffset = 0; } @Override public void onPageScrollStateChanged(int state) { if (state == 1) { isScrolling = true; } else { isScrolling = false; } } }); }