Android 自定义View跟随页面切换小圆点

自定义View圆形指示点跟随页面切换,一般应用于首页Splash启动 、广告Banner切换,或者步骤切换等场景,多配合ViewPager,RecycleView等控件的页面切换变化,代码实现如下:



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 androidx.annotation.Nullable;

/**
 * @author LHW
 * @date 2020/5/12.
 * Description:跟随页面切换圆形点
 */
public class CirclePageIndicatorView extends View {
    private Paint paint;
    private int circle_selected_radius = 7; //被选择的小球半径
    private int circle_normal_radius = 5; //普通小球半径
    private int count = 0; // 页数和小圆球的数量相等
    private int choosePosition = 0;// 被选中的位置
    private int gap = 20; // 两个小圆之间的中心距
    private int circleSelectedColor = Color.WHITE;//默认选中颜色
    private int circleUnSelectedColor = Color.GRAY;//默认未选中颜色

    public CirclePageIndicatorView(Context context) {
        super(context);
    }

    public CirclePageIndicatorView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public void setCirlceGap(int gap) {
        this.gap = gap;
    }

    public int getCirlceGap() {
        return gap;
    }

    public void setCircleSelectedColor(int color) {
        circleSelectedColor = color;
    }

    public int getCircleSelectedColor() {
        return circleSelectedColor;
    }


    public void setCircleUnSelectedColor(int color) {
        circleUnSelectedColor = color;
    }

    public int getCircleUnSelectedColor() {
        return circleUnSelectedColor;
    }

    public void setPagerCount(int count) {
        this.count = count;
        this.invalidate();
    }

    public void selectPosition(int pos) {
        choosePosition = pos;
        this.invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint = new Paint();
        paint.setAntiAlias(true);
        int width = this.getWidth();
        int height = this.getHeight();
        // 居中显示时,小圆球的起始位置
        int startPx = (width - (count - 1) * gap) / 2;

        for (int i = 0; i < count; i++) {
            if (choosePosition == i) {
                paint.setColor(circleSelectedColor);
                canvas.drawCircle(startPx + i * gap, height / 2, circle_selected_radius,
                        paint);
            } else {
                paint.setColor(circleUnSelectedColor);
                canvas.drawCircle(startPx + i * gap, height / 2, circle_normal_radius, paint);
            }
        }
    }
}

 

你可能感兴趣的:(Android效果实现集,android,viewpager)