我模仿刻度线的做法,先写一个数字,然后旋转画布,但是数字与刻度线之间的距离各不相同。不如6离刻度线的距离大于12到刻度线之间的距离

private void drawNum(Canvas canvas) {
Log.d(TAG, "drawNum()");
int radius = (int) (mWidth / 2f);
//写数字
canvas.save();
mScalePaint.setStrokeWidth(1);
mScalePaint.setStyle(Paint.Style.FILL);
mScalePaint.setTextAlign(Paint.Align.CENTER);
for (int i = 0; i < 60; i++) {
//下笔
if (i % 5 == 0) {
mScalePaint.setTypeface(Typeface.DEFAULT_BOLD);
drawNumber(canvas, radius, i, 20, 0.2f, i == 0 ? "12" : i / 5 + "");
Log.d(TAG, "radius " + radius + " i " + i);
} else {
mScalePaint.setTypeface(Typeface.DEFAULT);
drawNumber(canvas, radius, i, 14, 0.12f, i + "");
}
//滚动
canvas.rotate(6, radius, radius);
}
canvas.restore();
}
private void drawNumber(Canvas canvas, int radius, int i, int i2, float v, String s) {
//画起来不准确
mScalePaint.setTextSize(SizeUtils.dip2px(i2));
canvas.translate(radius, v * radius);
canvas.rotate(-i * 6);
canvas.drawText(s, 0, 0, mScalePaint);
canvas.rotate(i * 6);
canvas.translate(-radius, -v * radius);
}
给个提示,就是文字的y坐标不对,需要你根据文字的高度,重新计算出y坐标。
这里涉及到自定义view中,绘制文字的一个坑。
如果想了解详情,可以看看https://www.jianshu.com/p/d3667fab17bf