int circleXY = (int) (mWidth / 2); int circleRadius = (int) ((mWidth * 0.5) / 2) + 20; //计算文本宽度 int textWidth = getTextWidth(mTextPaint,mText); //计算baseline:垂直方向居中 Paint.FontMetricsInt fontMetrics = mTextPaint.getFontMetricsInt(); int baseline = (getMeasuredHeight() - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top; Rect bounds = new Rect(); mTextPaint.getTextBounds(mText, 0, mText.length(), bounds); int textX = (circleXY-textWidth)/2+circleRadius-20; canvas.drawText(mText,textX,baseline,mTextPaint);
/** * 获取文本的宽度 * @param paint * @param str * @return */ public static int getTextWidth(Paint paint, String str) { int iRet = 0; if (str != null && str.length() > 0) { int len = str.length(); float[] widths = new float[len]; paint.getTextWidths(str, widths); for (int j = 0; j < len; j++) { iRet += (int) Math.ceil(widths[j]); } } return iRet; }