最后绘制部分应该是流程提示文字

1)在此应为是动态设置了,为了更好的伸缩性,我们将存储文字的数组改为可变长的集合,同样存储文字长度的数组也要更改为集合,并在自定义属性中增加文字数组的属性stepTextContent,所以我们更改初始化方法init(Context context, AttributeSet attrs, int defStyleAttr)中关于计算文字长度的部分为:

stepTextContent = new ArrayList<>();
stepTextLength = new ArrayList<>();

if (textArray == null) {
for (int i = 1; i <= stepCount; i++) {
stepTextContent.add("Step " + i);
stepTextLength.add(mTextPaint.measureText("Step " + i));
}
} else {
for (int i = 0; i < stepCount; i++) {
stepTextContent.add(textArray[i].toString());
stepTextLength.add(mTextPaint.measureText(textArray[i].toString()));
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2)接下来是我们绘制文字部分如下:

@Override
protected synchronized void onDraw(Canvas canvas) {
int w = getWidth() - getPaddingLeft() - getPaddingRight() - maxImgXRadio * 2;
int h = getHeight() - getPaddingTop() - getPaddingBottom();
canvas.translate(getPaddingLeft() + maxImgXRadio, getPaddingTop());
drawBaseLine(w, h, canvas);
drawStepStateImg(canvas, w, h);
drawStepText(w, h, canvas);
}
private void drawStepText(int w, int h, Canvas canvas) {
Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics();
mTextPaint.setColor(textColor);
for (int i = 0; i < stepTextContent.size(); i++) {
canvas.drawText(stepTextContent.get(i), i * 1.0f * w / (stepCount - 1) - stepTextLength.get(i) / 2.0f, textHeight * 3 / 2.0f - fontMetrics.bottom, mTextPaint);
}
}
--------------------- 

猜你喜欢

转载自www.cnblogs.com/liyanyan665/p/11295959.html