Browse Source

提供自定义IndicatorView demo

zhangpan 5 years ago
parent
commit
32c08bb63c

+ 10 - 9
app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomIndicatorActivity.java

@@ -1,11 +1,13 @@
 package com.example.zhpan.circleviewpager.activity;
 
+import android.graphics.Color;
 import android.os.Bundle;
 
 import com.example.zhpan.circleviewpager.R;
-import com.zhpan.bannerview.indicator.DashIndicatorView;
 import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
+import com.example.zhpan.circleviewpager.view.FigureIndicatorView;
+import com.zhpan.bannerview.constants.IndicatorGravity;
 import com.zhpan.bannerview.utils.DpUtils;
 import com.zhpan.idea.utils.ToastUtils;
 
@@ -24,7 +26,8 @@ public class CustomIndicatorActivity extends BaseDataActivity {
     private void setUpViewPager() {
         mBannerViewPager = findViewById(R.id.banner_view_dash);
         mBannerViewPager.setAutoPlay(false).setCanLoop(true)
-                .setRoundCorner(DpUtils.dp2px(5))
+                .setPageMargin(DpUtils.dp2px(20))
+                .setIndicatorGravity(IndicatorGravity.END)
                 .setIndicatorView(setupIndicatorView(mDrawableList.size()))
                 .setOnPageClickListener(position -> ToastUtils.show(position + ""))
                 .setHolderCreator(ImageResourceViewHolder::new).create(mDrawableList);
@@ -33,14 +36,12 @@ public class CustomIndicatorActivity extends BaseDataActivity {
     /**
      * 这里可以是自定义的Indicator,需要继承BaseIndicatorView或者实现IIndicator接口;
      */
-    private DashIndicatorView setupIndicatorView(int pageSize) {
-        DashIndicatorView indicatorView = new DashIndicatorView(this);
+    private FigureIndicatorView setupIndicatorView(int pageSize) {
+        FigureIndicatorView indicatorView = new FigureIndicatorView(this);
         indicatorView.setPageSize(pageSize);
-        indicatorView.setIndicatorWidth(DpUtils.dp2px(8), DpUtils.dp2px(8));
-        indicatorView.setSliderHeight(DpUtils.dp2px(4));
-        indicatorView.setIndicatorGap(DpUtils.dp2px(5));
-        indicatorView.setCheckedColor(getResources().getColor(R.color.colorAccent));
-        indicatorView.setNormalColor(getResources().getColor(R.color.colorPrimary));
+        indicatorView.setRadius(DpUtils.dp2px(18));
+        indicatorView.setTextSize(DpUtils.dp2px(13));
+        indicatorView.setBackgroundColor(Color.parseColor("#88FF5252"));
         return indicatorView;
     }
 

+ 80 - 0
app/src/main/java/com/example/zhpan/circleviewpager/view/FigureIndicatorView.java

@@ -0,0 +1,80 @@
+package com.example.zhpan.circleviewpager.view;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.Nullable;
+
+import com.zhpan.bannerview.indicator.BaseIndicatorView;
+import com.zhpan.bannerview.utils.DpUtils;
+
+/**
+ * <pre>
+ *   Created by zhangpan on 2019-10-18.
+ *   Description:
+ * </pre>
+ */
+public class FigureIndicatorView extends BaseIndicatorView {
+
+    private int radius = DpUtils.dp2px(20);
+
+    private int backgroundColor = Color.parseColor("#88FF5252");
+
+    private int textColor = Color.WHITE;
+
+    private int textSize=DpUtils.dp2px(13);
+
+    public FigureIndicatorView(Context context) {
+        this(context, null);
+    }
+
+    public FigureIndicatorView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public FigureIndicatorView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mPaint = new Paint();
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        setMeasuredDimension(2 * radius, 2 * radius);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        mPaint.setColor(backgroundColor);
+        canvas.drawCircle(getWidth() / 2, getHeight() / 2, radius, mPaint);
+        mPaint.setColor(textColor);
+        mPaint.setTextSize(textSize);
+        String text = currentPosition + 1 + "/" + pageSize;
+        int textWidth = (int) mPaint.measureText(text);
+        Paint.FontMetricsInt fontMetricsInt = mPaint.getFontMetricsInt();
+        int baseline = (getMeasuredHeight() - fontMetricsInt.bottom + fontMetricsInt.top) / 2 - fontMetricsInt.top;
+        canvas.drawText(text, (getWidth() - textWidth) / 2, baseline, mPaint);
+    }
+
+    public void setRadius(int radius) {
+        this.radius = radius;
+    }
+
+    @Override
+    public void setBackgroundColor(@ColorInt int backgroundColor) {
+        this.backgroundColor = backgroundColor;
+    }
+
+    public void setTextSize(int textSize) {
+        this.textSize = textSize;
+    }
+
+    public void setTextColor(int textColor) {
+        this.textColor = textColor;
+    }
+}

+ 4 - 0
app/src/main/res/values/colors.xml

@@ -3,4 +3,8 @@
     <color name="colorPrimary">#008577</color>
     <color name="colorPrimaryDark">#00574B</color>
     <color name="colorAccent">#D81B60</color>
+
+    <color name="red">#FF5252</color>
+
+    <color name="transparent_red">#88FF5252</color>
 </resources>

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

@@ -11,6 +11,6 @@
     <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>
+    <string name="custom_indicator_view">自定义IndicatorView</string>
     <string name="page_style">页面样式</string>
 </resources>

+ 6 - 0
bannerview/src/main/java/com/zhpan/bannerview/indicator/BaseIndicatorView.java

@@ -2,6 +2,7 @@ package com.zhpan.bannerview.indicator;
 
 import android.content.Context;
 import android.graphics.Color;
+import android.graphics.Paint;
 import android.util.AttributeSet;
 import android.view.View;
 
@@ -49,6 +50,7 @@ public class BaseIndicatorView extends View implements IIndicator {
      * 是否是向右滑动,true向右,false向左
      */
     protected boolean slideToRight;
+
     /**
      * Indicator滑动模式,目前仅支持两种
      *
@@ -60,6 +62,8 @@ public class BaseIndicatorView extends View implements IIndicator {
     protected float normalIndicatorWidth;
     protected float checkedIndicatorWidth;
 
+    protected Paint mPaint;
+
     public BaseIndicatorView(Context context) {
         super(context);
     }
@@ -76,6 +80,8 @@ public class BaseIndicatorView extends View implements IIndicator {
         normalColor = Color.parseColor("#8C18171C");
         checkedColor = Color.parseColor("#8C6C6D72");
         slideMode = IndicatorSlideMode.NORMAL;
+        mPaint = new Paint();
+        mPaint.setAntiAlias(true);
     }
 
     @Override

+ 0 - 3
bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java

@@ -10,7 +10,6 @@ import android.util.AttributeSet;
  */
 public class CircleIndicatorView extends BaseIndicatorView {
     private static final String tag = "IndicatorView";
-    private Paint mPaint;
     private float mNormalRadius;
     private float mCheckedRadius;
     private float maxRadius;
@@ -26,9 +25,7 @@ public class CircleIndicatorView extends BaseIndicatorView {
 
     public CircleIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
-        mPaint = new Paint();
         mPaint.setColor(normalColor);
-        mPaint.setAntiAlias(true);
         mNormalRadius = normalIndicatorWidth / 2;
         mCheckedRadius = checkedIndicatorWidth / 2;
         indicatorGap = mNormalRadius * 2;

+ 0 - 4
bannerview/src/main/java/com/zhpan/bannerview/indicator/DashIndicatorView.java

@@ -7,12 +7,10 @@ import android.util.AttributeSet;
 
 import com.zhpan.bannerview.constants.IndicatorSlideMode;
 
-
 /**
  * Created by zhpan on 2017/12/6.
  */
 public class DashIndicatorView extends BaseIndicatorView {
-    private Paint mPaint;
     private float sliderHeight;
     private float maxWidth;
     private float minWidth;
@@ -27,9 +25,7 @@ public class DashIndicatorView extends BaseIndicatorView {
 
     public DashIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
-        mPaint = new Paint();
         mPaint.setColor(normalColor);
-        mPaint.setAntiAlias(true);
         sliderHeight = normalIndicatorWidth / 2;
     }