@@ -69,10 +69,10 @@ public class SliderView extends FrameLayout
6969 private SliderViewAdapter mPagerAdapter ;
7070 private SliderPager mSliderPager ;
7171 private InfinitePagerAdapter mInfinitePagerAdapter ;
72- private boolean mPausedSliding = false ;
7372 private OnSliderPageListener mPageListener ;
7473 private boolean mIsInfiniteAdapter = true ;
7574 private boolean mIsIndicatorEnabled = true ;
75+ private int mPreviousPosition = -1 ;
7676
7777 /*Constructor*/
7878 public SliderView (Context context ) {
@@ -382,13 +382,13 @@ public void setSliderTransformAnimation(SliderAnimations animation) {
382382 public boolean onTouch (View v , MotionEvent event ) {
383383 if (isAutoCycle ()) {
384384 if (event .getAction () == MotionEvent .ACTION_MOVE ) {
385- mPausedSliding = true ;
385+ stopAutoCycle () ;
386386 } else if (event .getAction () == MotionEvent .ACTION_UP ) {
387387 // resume after ~2 seconds debounce.
388388 mHandler .postDelayed (new Runnable () {
389389 @ Override
390390 public void run () {
391- mPausedSliding = false ;
391+ startAutoCycle () ;
392392 }
393393 }, 2000 );
394394 }
@@ -647,10 +647,7 @@ public int getIndicatorUnselectedColor() {
647647 @ Override
648648 public void run () {
649649 try {
650- if (!mPausedSliding ) {
651- // slide to next if not paused
652- slideToNextPosition ();
653- }
650+ slideToNextPosition ();
654651 } finally {
655652 if (mIsAutoCycle ) {
656653 // continue the loop
@@ -665,22 +662,23 @@ public void slideToNextPosition() {
665662 int adapterItemsCount = getAdapterItemsCount ();
666663 if (adapterItemsCount > 1 ) {
667664 if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_BACK_AND_FORTH ) {
668- if (currentPosition % (adapterItemsCount - 1 ) == 0 ) {
665+ if (currentPosition % (adapterItemsCount - 1 ) == 0 && mPreviousPosition != getAdapterItemsCount () - 1 && mPreviousPosition != 0 ) {
669666 mFlagBackAndForth = !mFlagBackAndForth ;
670667 }
671668 if (mFlagBackAndForth ) {
672- mSliderPager .setCurrentItem (++ currentPosition , true );
669+ mSliderPager .setCurrentItem (currentPosition + 1 , true );
673670 } else {
674- mSliderPager .setCurrentItem (-- currentPosition , true );
671+ mSliderPager .setCurrentItem (currentPosition - 1 , true );
675672 }
676673 }
677674 if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_LEFT ) {
678- mSliderPager .setCurrentItem (-- currentPosition , true );
675+ mSliderPager .setCurrentItem (currentPosition - 1 , true );
679676 }
680677 if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_RIGHT ) {
681- mSliderPager .setCurrentItem (++ currentPosition , true );
678+ mSliderPager .setCurrentItem (currentPosition + 1 , true );
682679 }
683680 }
681+ mPreviousPosition = currentPosition ;
684682 }
685683
686684
@@ -691,22 +689,23 @@ public void slideToPreviousPosition() {
691689
692690 if (adapterItemsCount > 1 ) {
693691 if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_BACK_AND_FORTH ) {
694- if (currentPosition % (adapterItemsCount - 1 ) == 0 ) {
692+ if (currentPosition % (adapterItemsCount - 1 ) == 0 && mPreviousPosition != getAdapterItemsCount () - 1 && mPreviousPosition != 0 ) {
695693 mFlagBackAndForth = !mFlagBackAndForth ;
696694 }
697- if (mFlagBackAndForth ) {
698- mSliderPager .setCurrentItem (-- currentPosition , true );
695+ if (mFlagBackAndForth && currentPosition < mPreviousPosition ) {
696+ mSliderPager .setCurrentItem (currentPosition - 1 , true );
699697 } else {
700- mSliderPager .setCurrentItem (++ currentPosition , true );
698+ mSliderPager .setCurrentItem (currentPosition + 1 , true );
701699 }
702700 }
703701 if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_LEFT ) {
704- mSliderPager .setCurrentItem (++ currentPosition , true );
702+ mSliderPager .setCurrentItem (currentPosition + 1 , true );
705703 }
706704 if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_RIGHT ) {
707- mSliderPager .setCurrentItem (-- currentPosition , true );
705+ mSliderPager .setCurrentItem (currentPosition - 1 , true );
708706 }
709707 }
708+ mPreviousPosition = currentPosition ;
710709 }
711710
712711 //sync infinite pager adapter with real one
0 commit comments