From e3df6f6fbea09807560a8b4a79ec96331735d56d Mon Sep 17 00:00:00 2001 From: "WS-DEV-PYRUS\\rtokarenko" Date: Fri, 18 Aug 2017 13:59:38 +0300 Subject: [PATCH] extra spacing option for CirclePagerIndicator --- library/res/values/vpi__attrs.xml | 2 ++ library/res/values/vpi__defaults.xml | 1 + .../com/viewpagerindicator/CirclePageIndicator.java | 12 +++++++++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/library/res/values/vpi__attrs.xml b/library/res/values/vpi__attrs.xml index a4d1f1093..9831d8917 100644 --- a/library/res/values/vpi__attrs.xml +++ b/library/res/values/vpi__attrs.xml @@ -53,6 +53,8 @@ + + diff --git a/library/res/values/vpi__defaults.xml b/library/res/values/vpi__defaults.xml index e4d44cbff..583a656c8 100644 --- a/library/res/values/vpi__defaults.xml +++ b/library/res/values/vpi__defaults.xml @@ -23,6 +23,7 @@ false #FFDDDDDD 1dp + 0dp 12dp 4dp diff --git a/library/src/com/viewpagerindicator/CirclePageIndicator.java b/library/src/com/viewpagerindicator/CirclePageIndicator.java index f441e89fd..d12ac5e93 100644 --- a/library/src/com/viewpagerindicator/CirclePageIndicator.java +++ b/library/src/com/viewpagerindicator/CirclePageIndicator.java @@ -62,7 +62,7 @@ public class CirclePageIndicator extends View implements PageIndicator { private float mLastMotionX = -1; private int mActivePointerId = INVALID_POINTER; private boolean mIsDragging; - + private float mExtraSpacing; public CirclePageIndicator(Context context) { this(context, null); @@ -84,6 +84,7 @@ public CirclePageIndicator(Context context, AttributeSet attrs, int defStyle) { final int defaultStrokeColor = res.getColor(R.color.default_circle_indicator_stroke_color); final float defaultStrokeWidth = res.getDimension(R.dimen.default_circle_indicator_stroke_width); final float defaultRadius = res.getDimension(R.dimen.default_circle_indicator_radius); + final float defaultExtraSpacing = res.getDimension(R.dimen.default_circle_indicator_extra_spacing); final boolean defaultCentered = res.getBoolean(R.bool.default_circle_indicator_centered); final boolean defaultSnap = res.getBoolean(R.bool.default_circle_indicator_snap); @@ -101,6 +102,7 @@ public CirclePageIndicator(Context context, AttributeSet attrs, int defStyle) { mPaintFill.setColor(a.getColor(R.styleable.CirclePageIndicator_fillColor, defaultFillColor)); mRadius = a.getDimension(R.styleable.CirclePageIndicator_radius, defaultRadius); mSnap = a.getBoolean(R.styleable.CirclePageIndicator_snap, defaultSnap); + mExtraSpacing = a.getDimension(R.styleable.CirclePageIndicator_extraSpacing, defaultExtraSpacing); Drawable background = a.getDrawable(R.styleable.CirclePageIndicator_android_background); if (background != null) { @@ -194,6 +196,10 @@ public boolean isSnap() { return mSnap; } + public void setExtraSpacing(float extraSpacing) { + mExtraSpacing = extraSpacing; + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); @@ -227,7 +233,7 @@ protected void onDraw(Canvas canvas) { shortPaddingBefore = getPaddingLeft(); } - final float threeRadius = mRadius * 3; + final float threeRadius = mRadius * 3 + mExtraSpacing; final float shortOffset = shortPaddingBefore + mRadius; float longOffset = longPaddingBefore + mRadius; if (mCentered) { @@ -469,7 +475,7 @@ private int measureLong(int measureSpec) { //Calculate the width according the views count final int count = mViewPager.getAdapter().getCount(); result = (int)(getPaddingLeft() + getPaddingRight() - + (count * 2 * mRadius) + (count - 1) * mRadius + 1); + + (count * 2 * mRadius) + (count - 1) * (mRadius + mExtraSpacing) + 1); //Respect AT_MOST value if that was what is called for by measureSpec if (specMode == MeasureSpec.AT_MOST) { result = Math.min(result, specSize);