|
19 | 19 | import static android.support.v4.view.ViewPager.GONE; |
20 | 20 | import static android.support.v4.view.ViewPager.OnPageChangeListener; |
21 | 21 | import static android.support.v4.view.ViewPager.PageTransformer; |
22 | | -import static android.support.v4.view.ViewPager.SCROLL_STATE_SETTLING; |
23 | 22 | import static android.support.v4.view.ViewPager.VISIBLE; |
24 | 23 | import static android.view.View.OVER_SCROLL_NEVER; |
25 | 24 | import static com.gigamole.infinitecycleviewpager.InfiniteCyclePagerAdapter.OnNotifyDataSetChangedListener; |
@@ -86,8 +85,8 @@ class InfiniteCycleManager implements OnNotifyDataSetChangedListener { |
86 | 85 | private boolean mIsAdapterInitialPosition; |
87 | 86 | // Flag for data set changed callback to invalidateTransformer() |
88 | 87 | private boolean mIsDataSetChanged; |
89 | | - // Detect is ViewPager settling |
90 | | - private boolean mIsSettling; |
| 88 | + // Detect is ViewPager state |
| 89 | + private int mState; |
91 | 90 |
|
92 | 91 | // Custom transform listener |
93 | 92 | private OnInfiniteCyclePageTransformListener mOnInfiniteCyclePageTransformListener; |
@@ -274,6 +273,10 @@ public boolean isVertical() { |
274 | 273 | return mIsVertical; |
275 | 274 | } |
276 | 275 |
|
| 276 | + public int getState() { |
| 277 | + return mState; |
| 278 | + } |
| 279 | + |
277 | 280 | public OnInfiniteCyclePageTransformListener getOnInfiniteCyclePageTransformListener() { |
278 | 281 | return mOnInfiniteCyclePageTransformListener; |
279 | 282 | } |
@@ -312,21 +315,15 @@ public PagerAdapter setAdapter(final PagerAdapter adapter) { |
312 | 315 | public boolean onTouchEvent(final MotionEvent event) { |
313 | 316 | if (mViewPageable.getAdapter() == null || mViewPageable.getAdapter().getCount() == 0) |
314 | 317 | return false; |
315 | | - if (mIsSettling || mViewPageable.isFakeDragging()) return false; |
| 318 | + if (mState == ViewPager.SCROLL_STATE_SETTLING || mViewPageable.isFakeDragging()) return false; |
316 | 319 | if (event.getPointerCount() > MIN_POINTER_COUNT || !mViewPageable.hasWindowFocus()) |
317 | 320 | event.setAction(MotionEvent.ACTION_UP); |
318 | 321 | checkHitRect(event); |
319 | 322 | return true; |
320 | 323 | } |
321 | 324 |
|
322 | 325 | public boolean onInterceptTouchEvent(MotionEvent event) { |
323 | | - if (mViewPageable.getAdapter() == null || mViewPageable.getAdapter().getCount() == 0) |
324 | | - return false; |
325 | | - if (mIsSettling || mViewPageable.isFakeDragging()) return false; |
326 | | - if (event.getPointerCount() > MIN_POINTER_COUNT || !mViewPageable.hasWindowFocus()) |
327 | | - event.setAction(MotionEvent.ACTION_UP); |
328 | | - checkHitRect(event); |
329 | | - return true; |
| 326 | + return onTouchEvent(event); |
330 | 327 | } |
331 | 328 |
|
332 | 329 | // When not has window focus clamp to nearest position |
@@ -469,7 +466,9 @@ public void transformPage(final View page, final float position) { |
469 | 466 | // Handle page layer and bounds visibility |
470 | 467 | enableHardwareLayer(page); |
471 | 468 | if (mItemCount == MIN_CYCLE_COUNT) { |
472 | | - if (position > 2.0F || position < -2.0F) { |
| 469 | + if (position > 2.0F || position < -2.0F || |
| 470 | + (mStackCount != 0 && position > 1.0F) || |
| 471 | + (mStackCount != 0 && position < -1.0F)) { |
473 | 472 | page.setVisibility(GONE); |
474 | 473 | return; |
475 | 474 | } else page.setVisibility(VISIBLE); |
@@ -705,7 +704,7 @@ public void onPageScrolled( |
705 | 704 | mStackCount = 0; |
706 | 705 |
|
707 | 706 | // We need to rewrite states when is dragging and when setCurrentItem() from idle |
708 | | - if (!mIsSettling || mIsInitialItem) { |
| 707 | + if (mState != ViewPager.SCROLL_STATE_SETTLING || mIsInitialItem) { |
709 | 708 | mIsInitialItem = false; |
710 | 709 |
|
711 | 710 | // Detect first state from idle |
@@ -746,7 +745,7 @@ else if (mOuterPageScrolledState == PageScrolledState.GOING_RIGHT && goingRight) |
746 | 745 |
|
747 | 746 | @Override |
748 | 747 | public void onPageScrollStateChanged(final int state) { |
749 | | - mIsSettling = state == SCROLL_STATE_SETTLING; |
| 748 | + mState = state; |
750 | 749 | } |
751 | 750 | }; |
752 | 751 |
|
|
0 commit comments