Skip to content

Commit fbba6cc

Browse files
committed
attribute sets added,
bugs fixed, new directions added to auto cycle mode, setter and getter for indicator margin and padding.
1 parent 41b9812 commit fbba6cc

File tree

6 files changed

+223
-43
lines changed

6 files changed

+223
-43
lines changed

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
import android.graphics.Color;
66
import android.os.Bundle;
77
import android.os.Handler;
8+
import android.view.Gravity;
89

910
import com.smarteist.autoimageslider.IndicatorAnimations;
1011
import com.smarteist.autoimageslider.IndicatorView.draw.controller.DrawController;
12+
import com.smarteist.autoimageslider.IndicatorView.draw.data.Orientation;
1113
import com.smarteist.autoimageslider.SliderAnimations;
1214
import com.smarteist.autoimageslider.SliderView;
1315

@@ -26,11 +28,13 @@ protected void onCreate(Bundle savedInstanceState) {
2628

2729
sliderView.setSliderAdapter(adapter);
2830

29-
sliderView.setIndicatorAnimation(IndicatorAnimations.COLOR); //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!!
30-
sliderView.setSliderIndicatorSelectedColor(Color.WHITE);
31-
sliderView.setSliderIndicatorUnselectedColor(Color.GRAY);
32-
sliderView.setSliderTransformAnimation(SliderAnimations.CUBEOUTDEPTHTRANSFORMATION);
31+
sliderView.setIndicatorAnimation(IndicatorAnimations.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!!
32+
sliderView.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION);
33+
sliderView.setAutoCycleDirection(SliderView.AUTO_CYCLE_DIRECTION_BACK_AND_FORTH);
34+
sliderView.setIndicatorSelectedColor(Color.WHITE);
35+
sliderView.setIndicatorUnselectedColor(Color.GRAY);
3336
sliderView.setScrollTimeInSec(4); //set scroll delay in seconds :
37+
sliderView.startAutoCycle();
3438

3539
sliderView.setOnIndicatorClickListener(new DrawController.ClickListener() {
3640
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public void onBindViewHolder(SliderAdapterVH viewHolder, int position) {
8787
@Override
8888
public int getCount() {
8989
//slider view count could be dynamic size
90-
return 4;
90+
return 5;
9191
}
9292

9393
class SliderAdapterVH extends SliderViewAdapter.ViewHolder {

app/src/main/res/layout/activity_main.xml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,22 @@
1313
android:layout_margin="16dp"
1414
app:cardCornerRadius="8dp">
1515

16-
1716
<com.smarteist.autoimageslider.SliderView
1817
android:id="@+id/imageSlider"
1918
android:layout_width="match_parent"
20-
android:layout_height="300dp" />
19+
android:layout_height="300dp"
20+
app:sliderAnimationDuration="600"
21+
app:sliderIndicatorAnimationDuration="600"
22+
app:sliderScrollTimeInSec="1"
23+
app:sliderIndicatorMargin="15dp"
24+
app:sliderIndicatorPadding="2dp"
25+
app:sliderIndicatorGravity="center_horizontal|bottom"
26+
app:sliderAutoCycleDirection="back_and_forth"
27+
app:sliderIndicatorOrientation="horizontal"
28+
app:sliderStartAutoCycle="true"
29+
app:sliderIndicatorUnselectedColor="#FFF"
30+
app:sliderIndicatorSelectedColor="#5A5A5A"/>
31+
2132
</androidx.cardview.widget.CardView>
2233

2334
</android.widget.RelativeLayout>

autoimageslider/src/main/java/com/smarteist/autoimageslider/IndicatorView/draw/controller/AttributeController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import androidx.annotation.NonNull;
77
import androidx.annotation.Nullable;
88
import android.util.AttributeSet;
9+
import android.view.Gravity;
910
import android.view.View;
1011
import com.smarteist.autoimageslider.IndicatorView.utils.DensityUtils;
1112
import com.smarteist.autoimageslider.IndicatorView.animation.type.*;
@@ -157,7 +158,7 @@ private AnimationType getAnimationType(int index) {
157158
return AnimationType.NONE;
158159
}
159160

160-
private RtlMode getRtlMode(int index) {
161+
public static RtlMode getRtlMode(int index) {
161162
switch (index) {
162163
case 0:
163164
return RtlMode.On;
@@ -169,4 +170,5 @@ private RtlMode getRtlMode(int index) {
169170

170171
return RtlMode.Auto;
171172
}
173+
172174
}

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

Lines changed: 144 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,27 @@
11
package com.smarteist.autoimageslider;
22

33
import android.content.Context;
4+
import android.content.res.TypedArray;
45
import android.database.DataSetObserver;
6+
import android.graphics.Color;
57
import android.os.Handler;
6-
import androidx.viewpager.widget.PagerAdapter;
7-
import androidx.viewpager.widget.ViewPager;
88
import android.util.AttributeSet;
9+
import android.view.Gravity;
910
import android.view.LayoutInflater;
1011
import android.view.View;
1112
import android.widget.FrameLayout;
13+
14+
import androidx.viewpager.widget.PagerAdapter;
15+
import androidx.viewpager.widget.ViewPager;
16+
1217
import com.smarteist.autoimageslider.IndicatorView.PageIndicatorView;
1318
import com.smarteist.autoimageslider.IndicatorView.animation.type.AnimationType;
19+
import com.smarteist.autoimageslider.IndicatorView.animation.type.BaseAnimation;
20+
import com.smarteist.autoimageslider.IndicatorView.animation.type.ColorAnimation;
1421
import com.smarteist.autoimageslider.IndicatorView.draw.controller.DrawController;
1522
import com.smarteist.autoimageslider.IndicatorView.draw.data.Orientation;
23+
import com.smarteist.autoimageslider.IndicatorView.draw.data.RtlMode;
24+
import com.smarteist.autoimageslider.IndicatorView.utils.DensityUtils;
1625
import com.smarteist.autoimageslider.Transformations.AntiClockSpinTransformation;
1726
import com.smarteist.autoimageslider.Transformations.Clock_SpinTransformation;
1827
import com.smarteist.autoimageslider.Transformations.CubeInDepthTransformation;
@@ -36,17 +45,25 @@
3645
import com.smarteist.autoimageslider.Transformations.VerticalShutTransformation;
3746
import com.smarteist.autoimageslider.Transformations.ZoomOutTransformation;
3847

48+
import static com.smarteist.autoimageslider.IndicatorView.draw.controller.AttributeController.getRtlMode;
49+
3950
public class SliderView extends FrameLayout {
4051

52+
public static final int AUTO_CYCLE_DIRECTION_RIGHT = 0;
53+
public static final int AUTO_CYCLE_DIRECTION_LEFT = 1;
54+
public static final int AUTO_CYCLE_DIRECTION_BACK_AND_FORTH = 2;
55+
4156
private final Handler mHandler = new Handler();
42-
private boolean mIsAutoCycle = true;
43-
private int mScrollTimeInSec = 2;
57+
private boolean mIsAutoCycle;
58+
private int mScrollTimeInSec;
4459
private CircularSliderHandle mCircularSliderHandle;
4560
private PageIndicatorView mPagerIndicator;
4661
private DataSetObserver mDataSetObserver;
4762
private PagerAdapter mPagerAdapter;
4863
private Runnable mSliderRunnable;
4964
private SliderPager mSliderPager;
65+
private int mAutoCycleDirection;
66+
private boolean mFlagBackAndForth;
5067

5168

5269
public SliderView(Context context) {
@@ -57,11 +74,60 @@ public SliderView(Context context) {
5774
public SliderView(Context context, AttributeSet attrs) {
5875
super(context, attrs);
5976
setupSlideView(context);
77+
setUpAttributes(context, attrs);
6078
}
6179

6280
public SliderView(Context context, AttributeSet attrs, int defStyleAttr) {
6381
super(context, attrs, defStyleAttr);
6482
setupSlideView(context);
83+
setUpAttributes(context, attrs);
84+
}
85+
86+
private void setUpAttributes(Context context, AttributeSet attrs) {
87+
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SliderView, 0, 0);
88+
89+
int indicatorOrientation = typedArray.getInt(R.styleable.SliderView_sliderIndicatorOrientation, Orientation.HORIZONTAL.ordinal());
90+
Orientation orientation;
91+
if (indicatorOrientation == 0) {
92+
orientation = Orientation.HORIZONTAL;
93+
} else {
94+
orientation = Orientation.VERTICAL;
95+
}
96+
int indicatorRadius = (int) typedArray.getDimension(R.styleable.SliderView_sliderIndicatorRadius, DensityUtils.dpToPx(2));
97+
int indicatorPadding = (int) typedArray.getDimension(R.styleable.SliderView_sliderIndicatorPadding, DensityUtils.dpToPx(3));
98+
int indicatorMargin = (int) typedArray.getDimension(R.styleable.SliderView_sliderIndicatorMargin, DensityUtils.dpToPx(12));
99+
int indicatorGravity = typedArray.getInt(R.styleable.SliderView_sliderIndicatorGravity, Gravity.CENTER | Gravity.BOTTOM);
100+
int indicatorUnselectedColor = typedArray.getColor(R.styleable.SliderView_sliderIndicatorUnselectedColor, Color.parseColor(ColorAnimation.DEFAULT_UNSELECTED_COLOR));
101+
int indicatorSelectedColor = typedArray.getColor(R.styleable.SliderView_sliderIndicatorSelectedColor, Color.parseColor(ColorAnimation.DEFAULT_SELECTED_COLOR));
102+
int indicatorAnimationDuration = typedArray.getInt(R.styleable.SliderView_sliderIndicatorAnimationDuration, BaseAnimation.DEFAULT_ANIMATION_TIME);
103+
int indicatorRtlMode = typedArray.getInt(R.styleable.PageIndicatorView_piv_rtl_mode, RtlMode.Off.ordinal());
104+
RtlMode rtlMode = getRtlMode(indicatorRtlMode);
105+
int sliderAnimationDuration = typedArray.getInt(R.styleable.SliderView_sliderAnimationDuration, SliderPager.DEFAULT_SCROLL_DURATION);
106+
int sliderScrollTimeInSec = typedArray.getInt(R.styleable.SliderView_sliderScrollTimeInSec, 2);
107+
boolean sliderCircularHandlerEnabled = typedArray.getBoolean(R.styleable.SliderView_sliderCircularHandlerEnabled, true);
108+
boolean sliderAutoCycleEnabled = typedArray.getBoolean(R.styleable.SliderView_sliderAutoCycleEnabled, true);
109+
boolean sliderStartAutoCycle = typedArray.getBoolean(R.styleable.SliderView_sliderStartAutoCycle, false);
110+
int sliderAutoCycleDirection = typedArray.getInt(R.styleable.SliderView_sliderAutoCycleDirection, AUTO_CYCLE_DIRECTION_RIGHT);
111+
112+
setIndicatorOrientation(orientation);
113+
setIndicatorRadius(indicatorRadius);
114+
setIndicatorPadding(indicatorPadding);
115+
setIndicatorMargin(indicatorMargin);
116+
setIndicatorGravity(indicatorGravity);
117+
setIndicatorUnselectedColor(indicatorUnselectedColor);
118+
setIndicatorSelectedColor(indicatorSelectedColor);
119+
setIndicatorAnimationDuration(indicatorAnimationDuration);
120+
setIndicatorRtlMode(rtlMode);
121+
setSliderAnimationDuration(sliderAnimationDuration);
122+
setScrollTimeInSec(sliderScrollTimeInSec);
123+
setCircularHandlerEnabled(sliderCircularHandlerEnabled);
124+
setAutoCycle(sliderAutoCycleEnabled);
125+
setAutoCycleDirection(sliderAutoCycleDirection);
126+
if (sliderStartAutoCycle) {
127+
startAutoCycle();
128+
}
129+
130+
typedArray.recycle();
65131
}
66132

67133
private void setupSlideView(Context context) {
@@ -96,6 +162,10 @@ public void setSliderAdapter(final PagerAdapter pagerAdapter) {
96162
mPagerIndicator.setDynamicCount(true);
97163
}
98164

165+
public PagerAdapter getSliderAdapter() {
166+
return mPagerAdapter;
167+
}
168+
99169
private void registerDataObserver() {
100170
if (mDataSetObserver != null) {
101171
mPagerAdapter.unregisterDataSetObserver(mDataSetObserver);
@@ -111,10 +181,6 @@ public void onChanged() {
111181
mPagerAdapter.registerDataSetObserver(mDataSetObserver);
112182
}
113183

114-
public PagerAdapter getSliderAdapter() {
115-
return mPagerAdapter;
116-
}
117-
118184
public boolean isAutoCycle() {
119185
return mIsAutoCycle;
120186
}
@@ -128,10 +194,9 @@ public void setAutoCycle(boolean autoCycle) {
128194
}
129195

130196
public void setCircularHandlerEnabled(boolean enable) {
197+
mSliderPager.clearOnPageChangeListeners();
131198
if (enable) {
132199
mSliderPager.addOnPageChangeListener(mCircularSliderHandle);
133-
} else {
134-
mSliderPager.clearOnPageChangeListeners();
135200
}
136201
}
137202

@@ -227,19 +292,6 @@ public void setSliderAnimationDuration(int duration) {
227292
mSliderPager.setScrollDuration(duration);
228293
}
229294

230-
public void setIndicatorAnimationDuration(long duration) {
231-
mPagerIndicator.setAnimationDuration(duration);
232-
}
233-
234-
235-
public void setIndicatorPadding(int padding) {
236-
mPagerIndicator.setPadding(padding);
237-
}
238-
239-
public void setIndicatorOrientation(Orientation orientation) {
240-
mPagerIndicator.setOrientation(orientation);
241-
}
242-
243295
public void setCurrentPagePosition(int position) {
244296

245297
if (getSliderAdapter() != null) {
@@ -258,6 +310,24 @@ public int getCurrentPagePosition() {
258310
}
259311
}
260312

313+
public void setIndicatorAnimationDuration(long duration) {
314+
mPagerIndicator.setAnimationDuration(duration);
315+
}
316+
317+
public void setIndicatorGravity(int gravity) {
318+
FrameLayout.LayoutParams layoutParams = (LayoutParams) mPagerIndicator.getLayoutParams();
319+
layoutParams.gravity = gravity;
320+
mPagerIndicator.setLayoutParams(layoutParams);
321+
}
322+
323+
public void setIndicatorPadding(int padding) {
324+
mPagerIndicator.setPadding(padding);
325+
}
326+
327+
public void setIndicatorOrientation(Orientation orientation) {
328+
mPagerIndicator.setOrientation(orientation);
329+
}
330+
261331
public void setIndicatorAnimation(IndicatorAnimations animations) {
262332

263333
switch (animations) {
@@ -294,7 +364,7 @@ public void setIndicatorAnimation(IndicatorAnimations animations) {
294364
}
295365
}
296366

297-
public void setPagerIndicatorVisibility(boolean visibility) {
367+
public void setIndicatorVisibility(boolean visibility) {
298368
if (visibility) {
299369
mPagerIndicator.setVisibility(VISIBLE);
300370
} else {
@@ -321,14 +391,35 @@ public void run() {
321391

322392
int currentPosition = mSliderPager.getCurrentItem();
323393

324-
if (currentPosition == getSliderAdapter().getCount() - 1) {
325-
// if is last item return to the first position
326-
mSliderPager.setCurrentItem(0, true);
394+
if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_BACK_AND_FORTH) {
395+
if (currentPosition == 0) {
396+
mFlagBackAndForth = true;
397+
}
398+
if (currentPosition == getSliderAdapter().getCount() - 1) {
399+
mFlagBackAndForth = false;
400+
}
401+
if (mFlagBackAndForth) {
402+
mSliderPager.setCurrentItem(++currentPosition, true);
403+
} else {
404+
mSliderPager.setCurrentItem(--currentPosition, true);
405+
}
406+
} else if (mAutoCycleDirection == AUTO_CYCLE_DIRECTION_LEFT) {
407+
if (currentPosition == 0) {
408+
mSliderPager.setCurrentItem(getSliderAdapter().getCount() - 1, true);
409+
} else {
410+
mSliderPager.setCurrentItem(--currentPosition, true);
411+
}
327412
} else {
328-
// continue smooth transition between pager
329-
mSliderPager.setCurrentItem(++currentPosition, true);
413+
if (currentPosition == getSliderAdapter().getCount() - 1) {
414+
// if is last item return to the first position
415+
mSliderPager.setCurrentItem(0, true);
416+
} else {
417+
// continue smooth transition between pager
418+
mSliderPager.setCurrentItem(++currentPosition, true);
419+
}
330420
}
331421

422+
332423
} finally {
333424
mHandler.postDelayed(this, mScrollTimeInSec * 1000);
334425
}
@@ -340,27 +431,45 @@ public void run() {
340431
mHandler.postDelayed(mSliderRunnable, mScrollTimeInSec * 1000);
341432
}
342433

343-
public int getSliderIndicatorRadius() {
434+
public void setAutoCycleDirection(int direction) {
435+
mAutoCycleDirection = direction;
436+
}
437+
438+
public int getAutoCycleDirection() {
439+
return mAutoCycleDirection;
440+
}
441+
442+
public int getIndicatorRadius() {
344443
return mPagerIndicator.getRadius();
345444
}
346445

347-
public void setSliderIndicatorRadius(int pagerIndicatorRadius) {
446+
public void setIndicatorRtlMode(RtlMode rtlMode) {
447+
mPagerIndicator.setRtlMode(rtlMode);
448+
}
449+
450+
public void setIndicatorRadius(int pagerIndicatorRadius) {
348451
this.mPagerIndicator.setRadius(pagerIndicatorRadius);
349452
}
350453

351-
public void setSliderIndicatorSelectedColor(int color) {
454+
public void setIndicatorMargin(int margin) {
455+
FrameLayout.LayoutParams layoutParams = (LayoutParams) mPagerIndicator.getLayoutParams();
456+
layoutParams.setMargins(margin, margin, margin, margin);
457+
mPagerIndicator.setLayoutParams(layoutParams);
458+
}
459+
460+
public void setIndicatorSelectedColor(int color) {
352461
this.mPagerIndicator.setSelectedColor(color);
353462
}
354463

355-
public int getSliderIndicatorSelectedColor() {
464+
public int getIndicatorSelectedColor() {
356465
return this.mPagerIndicator.getSelectedColor();
357466
}
358467

359-
public void setSliderIndicatorUnselectedColor(int color) {
468+
public void setIndicatorUnselectedColor(int color) {
360469
this.mPagerIndicator.setUnselectedColor(color);
361470
}
362471

363-
public int getSliderIndicatorUnselectedColor() {
472+
public int getIndicatorUnselectedColor() {
364473
return this.mPagerIndicator.getUnselectedColor();
365474
}
366475

0 commit comments

Comments
 (0)