背景:
先看写的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