Skip to content

Commit c980bd6

Browse files
committed
slider debounce implemented for better ux.
1 parent 9773ffc commit c980bd6

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

app/src/main/java/com/smarteist/imageslider/MainActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ protected void onCreate(Bundle savedInstanceState) {
3030

3131

3232
adapter = new SliderAdapterExample(this);
33-
//sliderView.setIndicatorEnabled(true);
3433
sliderView.setSliderAdapter(adapter);
3534
sliderView.setIndicatorAnimation(IndicatorAnimationType.WORM); //set indicator animation by using SliderLayout.IndicatorAnimations. :WORM or THIN_WORM or COLOR or DROP or FILL or NONE or SCALE or SCALE_DOWN or SLIDE and SWAP!!
3635
sliderView.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION);

autoimageslider/src/main/java/com/smarteist/autoimageslider/SliderView.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)