Explorar o código

Support Custom Indicator

张攀 %!s(int64=5) %!d(string=hai) anos
pai
achega
454ceefc37

+ 108 - 15
README.md

@@ -1,20 +1,27 @@
 
 
-## 效果预览
+# 效果预览
 
-**1.基础功能**
+## 1.基础功能
 
 | 嵌套RecyclerView | 自定义页面 | 嵌套PhotoView   |
 |--|--|--|
 | ![嵌套RecyclerView](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview1.gif) | ![自定义页面](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview2.gif) | ![嵌套PhotoView](https://github.com/zhpanvip/BannerViewPager/blob/master/image/preview3.gif)   |
 
-**2.自定义Indicator滑动样式**
+## 2.自定义Indicator样式
 
 | NORMAL | SMOOTH |
 |--|--|
 | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/slide_normal.gif) |  ![SMOOTH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/slide_smooth.gif) |
 
-**3.内置Transform样式**
+## 3.自定义IndicatorView
+如果以上样式不能满足你的需求,BannerViewPager还提供了完全自定义IndicatorView的功能。只要实现IIndicator接口,你就可以为所欲为的打造属于你自己的Indicator了,效果如下:
+
+| Custom Indicator |
+|--|
+| ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/custom_indicator.gif) |
+
+## 4.内置Transform样式
 
 | 参数 | STACK | ROTATE | DEPTH | ACCORDION |
 |--|--|--|--|--|
@@ -22,7 +29,7 @@
 
 
 
-## 开放API
+# 开放API
 
 | 方法名 | 方法描述 | 说明 |
 |--|--|--|
@@ -41,6 +48,7 @@
 |BannerViewPager<T, VH> setIndicatorRadius(@DimenRes int normalRadius, @DimenRes int checkRadius)  |设置指示器圆点半径  |  normalRadius:未选中时半径  checkedRadius:选中时的半径 |
 | BannerViewPager<T, VH> setIndicatorMargin(float indicatorMarginDp) | 指示器圆点间距| 单位dp  默认值圆点直径|
 | BannerViewPager<T, VH> setIndicatorMargin(@DimenRes int marginRes) | 指示器圆点间距| DimenRes 默认值圆点直径|
+| BannerViewPager<T, VH> setIndicatorView(IIndicator indicatorView) | 设置自定义指示器| 设置自定义指示器后以上关于IndicatorView的参数均会失效|
 | BannerViewPager<T, VH> setCurrentItem(final int position)  |  切换到第position个页面|  |
 | BannerViewPager<T, VH> setCurrentItem(final int position, final boolean smoothScroll) | 平滑切换到第position个页面 |  |
 | BannerViewPager<T, VH> setHolderCreator(HolderCreator<VH> holderCreator) |设置HolderCreator  |必须设置HolderCreator,否则会抛出NullPointerException|
@@ -50,10 +58,9 @@
 | void stopLoop() | 停止自动轮播 |  |
 | void create(List<T> list) |初始化并构造BannerViewPager  |必须调用,否则前面设置的参数无效  |
 
+# 如何使用
 
-## 如何使用
-
-  **1.gradle中添加依赖**
+## 1.gradle中添加依赖
    
 latestVersion is: [ ![latestVersion](https://api.bintray.com/packages/zhpanvip/CircleViewPager/bannerview/images/download.svg) ](https://bintray.com/zhpanvip/CircleViewPager/bannerview/_latestVersion)
 
@@ -67,7 +74,7 @@ implementation 'com.zhpan.library:bannerview:latestVersion'
 implementation 'com.zhpan.library:bannerview:2.1.4'
 ```
 
-  **2.在xml文件中添加如下代码:**
+## 2.在xml文件中添加如下代码:
 
 ```
     <com.zhpan.bannerview.BannerViewPager
@@ -77,7 +84,7 @@ implementation 'com.zhpan.library:bannerview:2.1.4'
             android:layout_height="160dp" />
 ```
 
-**3.自定义ViewHolder**
+## 3.自定义ViewHolder
 
 ```
 public class NetViewHolder implements ViewHolder<BannerData> {
@@ -101,7 +108,7 @@ public class NetViewHolder implements ViewHolder<BannerData> {
 }
 ```
 
- **4.BannerViewPager参数配置**
+## 4.BannerViewPager参数配置
 
 ```
     private BannerViewPager<BannerData, NetViewHolder> mBannerViewPager;
@@ -123,7 +130,7 @@ public class NetViewHolder implements ViewHolder<BannerData> {
         }
 ```
 
-**5.开启与停止轮播**
+## 5.开启与停止轮播
 
 如果开启了自动轮播功能,请务必在onDestroy中停止轮播,以免出现内存泄漏。
 
@@ -152,8 +159,93 @@ public class NetViewHolder implements ViewHolder<BannerData> {
             mBannerViewPager.startLoop();
     }
 ```
+## 6.高级功能---自定义IndicatorView
+
+**(1)自定义View并实现IIndicator接口**
+
+```
+public class RectangleIndicatorView extends View implements IIndicator {
+    ...
+
+    public RectangleIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        normalColor = Color.parseColor("#8C18171C");
+        checkedColor = Color.parseColor("#8C6C6D72");
+        mPaint = new Paint();
+        mPaint.setColor(normalColor);
+        mPaint.setAntiAlias(true);
+        sliderWidth = DpUtils.dp2px(context, 5);
+        sliderHeight = sliderWidth / 2;
+        mMargin = sliderWidth;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        setMeasuredDimension((int) ((mPageSize - 1) * mMargin + sliderWidth * mPageSize),
+                (int) (sliderHeight));
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        mPaint.setColor(normalColor);
+        for (int i = 0; i < mPageSize; i++) {
+            mPaint.setColor(normalColor);
+            canvas.drawRect(i * (sliderWidth) + i * +mMargin, 0, i * (sliderWidth) + i * +mMargin + sliderWidth, sliderHeight, mPaint);
+        }
+        drawSliderStyle(canvas);
+    }
+
+    @Override
+    public void onPageSelected(int position) {
+        if (mSlideStyle == IndicatorSlideMode.NORMAL) {
+            this.currentPosition = position;
+            invalidate();
+        }
+    }
+
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+        if (mSlideStyle == IndicatorSlideMode.SMOOTH) {
+            slideProgress = positionOffset;
+            currentPosition = position;
+            invalidate();
+        }
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state) {
+
+    }
+
+    private void drawSliderStyle(Canvas canvas) {
+        switch (mSlideStyle) {
+            case NORMAL:
+                slideProgress = 0;
+            case SMOOTH:
+                slideProgress = (currentPosition == mPageSize - 1) ? 0 : slideProgress;
+                break;
+        }
+        mPaint.setColor(checkedColor);
+        canvas.drawRect(currentPosition * (sliderWidth) + currentPosition * +mMargin + (sliderWidth + mMargin) * slideProgress, 0, currentPosition * (sliderWidth) + currentPosition * +mMargin + (sliderWidth + mMargin) * slideProgress + sliderWidth, sliderHeight, mPaint);
+    }
+    ...
+ }
+```
+**(2)BannerViewPager设置自定义Indicator**
 
-## TODO 版本计划
+```
+RectangleIndicatorView indicatorView = new RectangleIndicatorView(this);
+        indicatorView.setPageSize(list.size()).setSliderWidth(8f).setSliderHeight(3.5f)
+                .setIndicatorMargin(5f).setCheckedColor(getResources().getColor(R.color.colorAccent))
+                .setNormalColor(getResources().getColor(R.color.colorPrimary));
+        viewPager.setIndicatorView(indicatorView)
+                .setHolderCreator(SlideModeViewHolder::new).create(list);
+
+```
+
+# TODO 版本计划
 
 ~~(1)优化及重构IndicatorView~~(2.0.1)
 
@@ -166,10 +258,11 @@ public class NetViewHolder implements ViewHolder<BannerData> {
 ~~(5)增加IndicatorView的滑动样式~~(2.2.2)
 
  (6)增添更多Indicator滑动模式(2.3.+)
-
+ 
  (7)ViewPager更换为ViewPager2 (3.0.0)
+ 
+ (8)目前Indicator部分代码比较乱,还有很大很大的优化空间,后续版本将持续优化
 
- (8)如有问题欢迎提issue,该库会持续更新优化。
 
 [更多详情请点击此处](http://blog.csdn.net/qq_20521573/article/details/52037929)
 

+ 2 - 1
app/src/main/AndroidManifest.xml

@@ -12,7 +12,8 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".activity.IndicatorSlideModeActivity"></activity>
+        <activity android:name=".activity.CustomIndicatorActivity"></activity>
+        <activity android:name=".activity.IndicatorSlideModeActivity" />
         <activity android:name=".activity.PageTransformerActivity" />
         <activity android:name=".activity.NetworkBannerActivity" />
         <activity

+ 149 - 0
app/src/main/java/com/example/zhpan/circleviewpager/RectangleIndicatorView.java

@@ -0,0 +1,149 @@
+package com.example.zhpan.circleviewpager;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.zhpan.bannerview.enums.IndicatorSlideMode;
+import com.zhpan.bannerview.indicator.IIndicator;
+import com.zhpan.bannerview.utils.DpUtils;
+
+/**
+ * Created by zhpan on 2017/12/6.
+ */
+public class RectangleIndicatorView extends View implements IIndicator {
+    private int normalColor;
+    private int checkedColor;
+    private Paint mPaint;
+    private int mPageSize;
+    private float sliderWidth;
+    private float sliderHeight;
+    private int currentPosition;
+    private float mMargin;
+    private IndicatorSlideMode mSlideStyle = IndicatorSlideMode.SMOOTH;
+    private float slideProgress;
+
+    public RectangleIndicatorView(Context context) {
+        this(context, null);
+    }
+
+    public RectangleIndicatorView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public RectangleIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        normalColor = Color.parseColor("#8C18171C");
+        checkedColor = Color.parseColor("#8C6C6D72");
+        mPaint = new Paint();
+        mPaint.setColor(normalColor);
+        mPaint.setAntiAlias(true);
+        sliderWidth = DpUtils.dp2px(context, 5);
+        sliderHeight = sliderWidth / 2;
+        mMargin = sliderWidth;
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        setMeasuredDimension((int) ((mPageSize - 1) * mMargin + sliderWidth * mPageSize),
+                (int) (sliderHeight));
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        mPaint.setColor(normalColor);
+        for (int i = 0; i < mPageSize; i++) {
+            mPaint.setColor(normalColor);
+            canvas.drawRect(i * (sliderWidth) + i * +mMargin, 0, i * (sliderWidth) + i * +mMargin + sliderWidth, sliderHeight, mPaint);
+        }
+        drawSliderStyle(canvas);
+    }
+
+    @Override
+    public void onPageSelected(int position) {
+        if (mSlideStyle == IndicatorSlideMode.NORMAL) {
+            this.currentPosition = position;
+            invalidate();
+        }
+    }
+
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+        if (mSlideStyle == IndicatorSlideMode.SMOOTH) {
+            slideProgress = positionOffset;
+            currentPosition = position;
+            invalidate();
+        }
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state) {
+
+    }
+
+    private void drawSliderStyle(Canvas canvas) {
+        switch (mSlideStyle) {
+            case NORMAL:
+                slideProgress = 0;
+            case SMOOTH:
+                slideProgress = (currentPosition == mPageSize - 1) ? 0 : slideProgress;
+                break;
+        }
+        mPaint.setColor(checkedColor);
+        canvas.drawRect(currentPosition * (sliderWidth) + currentPosition * +mMargin + (sliderWidth + mMargin) * slideProgress, 0, currentPosition * (sliderWidth) + currentPosition * +mMargin + (sliderWidth + mMargin) * slideProgress + sliderWidth, sliderHeight, mPaint);
+    }
+
+
+    public RectangleIndicatorView setNormalColor(int normalColor) {
+        this.normalColor = normalColor;
+        return this;
+    }
+
+    public RectangleIndicatorView setCheckedColor(int checkedColor) {
+        this.checkedColor = checkedColor;
+        return this;
+    }
+
+    public RectangleIndicatorView setPageSize(int pageSize) {
+        this.mPageSize = pageSize;
+        requestLayout();
+        return this;
+    }
+
+    public RectangleIndicatorView setIndicatorMargin(float margin) {
+        if (margin > 0) {
+            this.mMargin = DpUtils.dp2px(getContext(), margin);
+        }
+        return this;
+    }
+
+    public RectangleIndicatorView setSliderWidth(float sliderWidth) {
+        this.sliderWidth = DpUtils.dp2px(getContext(), sliderWidth);
+        return this;
+    }
+
+    public RectangleIndicatorView setSliderHeight(float sliderHeight) {
+        this.sliderHeight = DpUtils.dp2px(getContext(), sliderHeight);
+        return this;
+    }
+
+    public RectangleIndicatorView setSlideStyle(IndicatorSlideMode slideStyle) {
+        mSlideStyle = slideStyle;
+        return this;
+    }
+}

+ 37 - 0
app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomIndicatorActivity.java

@@ -0,0 +1,37 @@
+package com.example.zhpan.circleviewpager.activity;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.os.Bundle;
+
+import com.example.zhpan.circleviewpager.R;
+import com.example.zhpan.circleviewpager.RectangleIndicatorView;
+import com.example.zhpan.circleviewpager.viewholder.SlideModeViewHolder;
+import com.zhpan.bannerview.BannerViewPager;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class CustomIndicatorActivity extends AppCompatActivity {
+    private String[] picUrls = {"http://pic31.nipic.com/20130801/11604791_100539834000_2.jpg",
+            "http://pic37.nipic.com/20140115/7430301_100825571157_2.jpg",
+            "http://pic29.nipic.com/20130507/8952533_183922555000_2.jpg",
+            "http://b-ssl.duitang.com/uploads/item/201706/10/20170610095055_G5LM8.jpeg"};
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_indicator_slide_mode);
+        setTitle(getString(R.string.custom_indicator_view));
+        BannerViewPager<String, SlideModeViewHolder> viewPager = findViewById(R.id.banner_view);
+        List<String> list = Arrays.asList(picUrls);
+        RectangleIndicatorView indicatorView = new RectangleIndicatorView(this);
+        indicatorView.setPageSize(list.size()).setSliderWidth(8f).setSliderHeight(3.5f)
+                .setIndicatorMargin(5f).setCheckedColor(getResources().getColor(R.color.colorAccent))
+                .setNormalColor(getResources().getColor(R.color.colorPrimary));
+        viewPager.setAutoPlay(false).setCanLoop(true)
+                .setRoundCorner(15f)
+                .setIndicatorView(indicatorView)
+                .setHolderCreator(SlideModeViewHolder::new).create(list);
+    }
+}

+ 2 - 1
app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorSlideModeActivity.java

@@ -6,12 +6,13 @@ import android.graphics.Color;
 import android.os.Bundle;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.ViewGroup;
 
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.viewholder.SlideModeViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.enums.IndicatorSlideMode;
-import com.zhpan.bannerview.enums.IndicatorStyle;
+import com.zhpan.bannerview.indicator.CircleIndicatorView;
 
 import java.util.Arrays;
 import java.util.List;

+ 3 - 0
app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java

@@ -21,6 +21,9 @@ public class MainActivity extends AppCompatActivity {
     public void onClick(View view) {
         Intent intent;
         switch (view.getId()) {
+            case R.id.btn_custom_indicator:
+                intent = new Intent(this, CustomIndicatorActivity.class);
+                break;
             case R.id.btn_view_pager3:
                 intent = new Intent(this, BannerPhotoViewActivity.class);
                 break;

+ 9 - 0
app/src/main/res/layout/activity_custom_indicator.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".activity.CustomIndicatorActivity">
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 8 - 0
app/src/main/res/layout/activity_main.xml

@@ -14,6 +14,14 @@
         android:layout_marginTop="15dp"
         android:text="@string/indicator_slide_mode" />
 
+    <Button
+        android:id="@+id/btn_custom_indicator"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:onClick="onClick"
+        android:layout_marginTop="15dp"
+        android:text="@string/custom_indicator_view" />
+
     <Button
         android:id="@+id/btn_view_pager4"
         android:layout_width="match_parent"

+ 2 - 1
app/src/main/res/values/strings.xml

@@ -1,5 +1,5 @@
 <resources>
-    <string name="app_name">CircleViewPager</string>
+    <string name="app_name">BannerViewPager</string>
     <string name="wrapper_photo_view">嵌套PhotoView</string>
     <string name="title_custom_page">自定义页面样式</string>
     <string name="title_view_pager">圆角自动轮播</string>
@@ -11,4 +11,5 @@
     <string name="image_description">image description</string>
     <string name="normal">NORMAL</string>
     <string name="smooth">SMOOTH</string>
+    <string name="custom_indicator_view">Custom IndicatorView</string>
 </resources>

+ 1 - 1
bannerview/build.gradle

@@ -37,7 +37,7 @@ dependencies {
     implementation 'androidx.appcompat:appcompat:1.0.2'
 }
 
-version = "2.2.2"
+version = "2.2.3"
 def siteUrl = 'https://github.com/zhpanvip/BannerViewPager'      // 项目的主页
 def gitUrl = 'https://github.com/zhpanvip/BannerViewPager.git'   // Git仓库的url
 group = "com.zhpan.library" // Maven Group ID for the artifact,一般填你唯一的包名

+ 3 - 3
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -29,7 +29,7 @@ import com.zhpan.bannerview.provider.BannerScroller;
 import com.zhpan.bannerview.provider.ViewStyleSetter;
 import com.zhpan.bannerview.transform.PageTransformerFactory;
 import com.zhpan.bannerview.enums.TransformerStyle;
-import com.zhpan.bannerview.indicator.IndicatorView;
+import com.zhpan.bannerview.indicator.CircleIndicatorView;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -172,7 +172,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
      */
     private void initData() {
         if (mList.size() > 0) {
-            if (mList.size() > 1 && showIndicator) {
+            if (mIndicatorView == null && mList.size() > 1 && showIndicator) {
                 initIndicator(getIndicatorView());
             }
             if (isCanLoop) {
@@ -183,7 +183,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
     }
 
     private View getIndicatorView() {
-        IndicatorView indicatorView = new IndicatorView(getContext());
+        CircleIndicatorView indicatorView = new CircleIndicatorView(getContext());
         indicatorView.setPageSize(mList.size()).setIndicatorRadius(normalIndicatorRadius, checkedIndicatorRadius)
                 .setIndicatorMargin(indicatorMargin).setCheckedColor(indicatorCheckedColor)
                 .setNormalColor(indicatorNormalColor).setSlideStyle(mIndicatorSlideMode).invalidate();

+ 10 - 10
bannerview/src/main/java/com/zhpan/bannerview/indicator/IndicatorView.java → bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java

@@ -13,7 +13,7 @@ import com.zhpan.bannerview.utils.DpUtils;
 /**
  * Created by zhpan on 2017/12/6.
  */
-public class IndicatorView extends View implements IIndicator {
+public class CircleIndicatorView extends View implements IIndicator {
     private static final String tag = "IndicatorView";
     private int normalColor;
     private int checkedColor;
@@ -28,15 +28,15 @@ public class IndicatorView extends View implements IIndicator {
     private IndicatorSlideMode mSlideStyle = IndicatorSlideMode.SMOOTH;
     private float slideProgress;
 
-    public IndicatorView(Context context) {
+    public CircleIndicatorView(Context context) {
         this(context, null);
     }
 
-    public IndicatorView(Context context, AttributeSet attrs) {
+    public CircleIndicatorView(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
 
-    public IndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
+    public CircleIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
         normalColor = Color.parseColor("#8C18171C");
         checkedColor = Color.parseColor("#8C6C6D72");
@@ -113,36 +113,36 @@ public class IndicatorView extends View implements IIndicator {
     }
 
 
-    public IndicatorView setNormalColor(int normalColor) {
+    public CircleIndicatorView setNormalColor(int normalColor) {
         this.normalColor = normalColor;
         return this;
     }
 
-    public IndicatorView setCheckedColor(int checkedColor) {
+    public CircleIndicatorView setCheckedColor(int checkedColor) {
         this.checkedColor = checkedColor;
         return this;
     }
 
-    public IndicatorView setPageSize(int pageSize) {
+    public CircleIndicatorView setPageSize(int pageSize) {
         this.mPageSize = pageSize;
         requestLayout();
         return this;
     }
 
-    public IndicatorView setIndicatorRadius(float radiusDp, float checkedRadius) {
+    public CircleIndicatorView setIndicatorRadius(float radiusDp, float checkedRadius) {
         this.mNormalRadius = radiusDp;
         this.mCheckedRadius = checkedRadius;
         return this;
     }
 
-    public IndicatorView setIndicatorMargin(float margin) {
+    public CircleIndicatorView setIndicatorMargin(float margin) {
         if (margin > 0) {
             this.mMargin = margin;
         }
         return this;
     }
 
-    public IndicatorView setSlideStyle(IndicatorSlideMode slideStyle) {
+    public CircleIndicatorView setSlideStyle(IndicatorSlideMode slideStyle) {
         mSlideStyle = slideStyle;
         return this;
     }

BIN=BIN
image/custom_indicator.gif