Browse Source

New function,Custom IndicatorView for BannerViewPager

zhangpan 5 years ago
parent
commit
0c674bc35e
1 changed files with 37 additions and 24 deletions
  1. 37 24
      bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

+ 37 - 24
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -19,6 +19,7 @@ import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.RelativeLayout;
 
+import com.zhpan.bannerview.indicator.IIndicator;
 import com.zhpan.bannerview.utils.DpUtils;
 import com.zhpan.bannerview.adapter.BannerPagerAdapter;
 import com.zhpan.bannerview.enums.IndicatorSlideMode;
@@ -76,7 +77,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
     // 页面点击事件监听
     private OnPageClickListener mOnPageClickListener;
     // 圆点指示器的Layout
-    private IndicatorView mIndicatorView;
+    private IIndicator mIndicatorView;
 
     private IndicatorSlideMode mIndicatorSlideMode = IndicatorSlideMode.SMOOTH;
 
@@ -171,7 +172,9 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
      */
     private void initData() {
         if (mList.size() > 0) {
-            initIndicator();
+            if (mList.size() > 1 && showIndicator) {
+                initIndicator(getIndicatorView());
+            }
             if (isCanLoop) {
                 currentPosition = 1;
             }
@@ -179,6 +182,14 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
         }
     }
 
+    private View getIndicatorView() {
+        IndicatorView indicatorView = new IndicatorView(getContext());
+        indicatorView.setPageSize(mList.size()).setIndicatorRadius(normalIndicatorRadius, checkedIndicatorRadius)
+                .setIndicatorMargin(indicatorMargin).setCheckedColor(indicatorCheckedColor)
+                .setNormalColor(indicatorNormalColor).setSlideStyle(mIndicatorSlideMode).invalidate();
+        return indicatorView;
+    }
+
 
     /**
      * 设置触摸事件,当滑动或者触摸时停止自动轮播
@@ -207,28 +218,23 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
     /**
      * 构造指示器
      */
-    private void initIndicator() {
-        if (mList.size() > 1 && showIndicator) {
-            mIndicatorView = new IndicatorView(getContext());
-            mRelativeLayout.removeAllViews();
-            mRelativeLayout.addView(mIndicatorView);
-            mIndicatorView.setPageSize(mList.size()).setIndicatorRadius(normalIndicatorRadius, checkedIndicatorRadius)
-                    .setIndicatorMargin(indicatorMargin).setCheckedColor(indicatorCheckedColor)
-                    .setNormalColor(indicatorNormalColor).setSlideStyle(mIndicatorSlideMode).invalidate();
-            RelativeLayout.LayoutParams layoutParams =
-                    (RelativeLayout.LayoutParams) mIndicatorView.getLayoutParams();
-            layoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
-            switch (gravity) {
-                case CENTER:
-                    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
-                    break;
-                case START:
-                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
-                    break;
-                case END:
-                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);
-                    break;
-            }
+    private void initIndicator(View indicatorView) {
+        mRelativeLayout.removeAllViews();
+        mRelativeLayout.addView(indicatorView);
+        mIndicatorView = (IIndicator) indicatorView;
+        RelativeLayout.LayoutParams layoutParams =
+                (RelativeLayout.LayoutParams) indicatorView.getLayoutParams();
+        layoutParams.addRule(RelativeLayout.CENTER_VERTICAL);
+        switch (gravity) {
+            case CENTER:
+                layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
+                break;
+            case START:
+                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
+                break;
+            case END:
+                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);
+                break;
         }
     }
 
@@ -438,6 +444,13 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
         return this;
     }
 
+    public BannerViewPager<T, VH> setIndicatorView(IIndicator indicatorView) {
+        if (indicatorView instanceof View) {
+            initIndicator((View) indicatorView);
+        }
+        return this;
+    }
+
     /**
      * 设置指示器半径大小
      *