自定义StepView

背景:

先看写的demo图:

这里写图片描述

项目中有一个需求:就是希望用户进行到哪步,哪步就高亮显示,并且每个步骤的图片都是不同的,完成的和未完成的线条和字也要做相应区分。

我是参考了gtihub上一个开源的stepview(https://github.com/baoyachi/StepView),但是这个不完全符合我的项目需求,所以在其源码上,进行修改和相应调整,然后做出符合自己项目需求的stepview。

具体demo可以从这里下载

代码:

(1)自定义StepView :(只画圆圈和线条)


public class StepView extends View {
   

    //默认线条宽度:
    private int defaultStepIndicatorNum = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());

    private List<Float> mCircleCenterPointPositionList;//定义所有圆的圆心点位置的集合
    private Paint mUnCompletedPaint;//未完成Paint
    private Paint mCompletedPaint;//完成paint
    private int mUnCompletedLineColor = ContextCompat.getColor(getContext(), R.color.uncompleted);//定义默认未完成线的颜色  definition
    private float mLinePadding;//两条连线之间的间距
    private int mCompletedLineColor = ContextCompat.getColor(getContext(), R.color.completed);//定义默认完成线的颜色

    private float mCenterY;//该view的Y轴中间位置     definition view centerY position
    private float mLeftY;//左上方的Y位置  definition rectangle LeftY position
    private float mRightY;//右下方的位置  definition rectangle RightY position

    private int mStepNum = 4;//默认有4个图标,设计4张图片
    private Drawable[] defaults = new Drawable[mStepNum];
    private ArrayList<Drawable> drawableLists = new ArrayList<>();

    private int screenWidth;
    private OnDrawIndicatorListener mOnDrawListener;
    private int mComplectingPosition;

    private float mCompletedLineHeight;//完成线的高度     definition completed line height
    private float mCircleRadius;//圆的半径
    private String[] mStrList;

    private static final int SPACE=20;//为了调整横线的长度

    public StepView(Context context) {
        this(context, null);
    }

    public StepView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public StepView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }


    private void init() {
        mCircleCenterPointPositionList = new ArrayList<>();//初始化
        mUnCompletedPaint = new Paint();//没有完成的画笔
        mCompletedPaint = new Paint();//完成的画笔

        mUnCompletedPaint.setAntiAlias(true);
        mUnCompletedPaint.setColor(mUnCompletedLineColor);
        mUnCompletedPaint.setStyle(Paint.Style.STROKE);
        mUnCompletedPaint.setStrokeWidth(2);

        mCompletedPaint.setAntiAlias(true);
        mCompletedPaint.setColor(mCompletedLineColor);
        mCompletedPaint.setStyle(Paint.Style.STROKE);
        mCompletedPaint.setStrokeWidth(2);

        mCompletedPaint.setStyle(Paint.Style.FILL);
        mUnCompletedPaint.setStyle(Paint.Style.FILL);

        //已经完成线的宽高 set mCompletedLineHeight
        mCompletedLineHeight = 0.05f * defaultStepIndicatorNum;
        //圆的半径  set mCircleRadius
        mCircleRadius = 0.28f * defaultStepIndicatorNum;
        //线与线之间的间距    set 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值