代码:
/**
* 画刻度数字
*
* @param canvas
*/
private void drawNumber(Canvas canvas, Paint mpaint) {
/**
pointX,pointY: 屏幕中心坐标
raduisNum: 数字所在圆的半径
ROTATE_HOUR: ROTATE_HOUR=Math.PI / 6;// 表盘上每小时的角度(弧度)
*/
// 画刻度
for (int i = 0; i < 12; i++) {
String NUMBER = String.valueOf(((i + 2) % 12) + 1);
mpaint.setTextSize(70 * mDensityDpi);
// 文字偏X移量=pointX-文字的宽的一半
float pointXOffsets = pointX - mpaint.measureText(NUMBER) / 2;
// 文字偏Y移量=pointY-文字高度的一半
/*(备注:mpaint.ascent()返回值为负数,理论上应该取反,为何取反后反而对不齐???)
*/
float pointYOffsets = pointY - (mpaint.ascent() / 2 + mpaint.descent() / 2);
float baseX = (float) (pointXOffsets + raduisNum * Math.cos(i * ROTATE_HOUR));
float baseY = (float) (pointYOffsets + raduisNum * Math.sin(i * ROTATE_HOUR));
canvas.drawText(NUMBER, baseX, baseY, mpaint);
// 辅助圆,检测数字刻偏移是否正常
/*
* Paint mPaint=new Paint();
* mPaint.setStyle(Paint.Style.STROKE);
* canvas.drawCircle(pointX, pointY,(float) (raduisNum),mPaint);
*/
}
}