左对齐
竖向居中
// 在圆圈里居中绘制文字
paint.setTextSize(300);
// ★ 如果要得到正确的FontMetrics,要在setTextSize后获取,不然得到的是旧的值
paint.getFontMetrics(fontMetrics);
paint.setTextAlign(Paint.Align.CENTER);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.FILL);
// 得到偏移量
float offset = (fontMetrics.ascent + fontMetrics.descent) / 2;
// float offset = (paint.ascent() + paint.descent()) / 2;// ascent的值也可以直接通过paint得到
canvas.drawText(str, getWidth() / 2, getHeight() / 2 - offset, paint);
其他
- StaticLayout 自动换行 (drawText不会自动换行的)
- paint.breakText()计算换行的索引,做出文字环绕图片效果
全部代码为
package lemon.view.com.lemonphotoview.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
import lemon.view.com.lemonphotoview.view.utils.DpPxUtil;
/**
* 描述当前版本功能
*
*/
public class WenZiView extends View {
private Paint.FontMetrics fontMetrics;
private Rect rect;
public WenZiView(Context context) {
super(context);
}
public WenZiView(Context context, AttributeSet attrs) {
super(context, attrs);
}
private Paint paint;
private int randius = DpPxUtil.dip2px(getContext(), 100);
String str = "ajf";
{
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
fontMetrics = new Paint.FontMetrics();
rect = new Rect();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 画一个圆圈
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(9);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, randius, paint);
// 在圆圈里居中绘制文字
paint.setTextSize(300);
// ★ 如果要得到正确的FontMetrics,要在setTextSize后获取,不然得到的是旧的值
paint.getFontMetrics(fontMetrics);
paint.setTextAlign(Paint.Align.CENTER);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.FILL);
// 得到偏移量
float offset = (fontMetrics.ascent + fontMetrics.descent) / 2;
// float offset = (paint.ascent() + paint.descent()) / 2;// ascent的值也可以直接通过paint得到
canvas.drawText(str, getWidth() / 2, getHeight() / 2 - offset, paint);
canvas.drawLine(0, getHeight() / 2, 3000, getHeight() / 2, paint);
//++++++++++++++++++++++++++//++++++++++++++++++++++++++//++++++++++++++++++++++++++//++++++++++++++++++++++++++++++
// 左对齐,由于不同字体预留左侧边距不用,所以要去掉
// 大字体
paint.setTextSize(189);
paint.getTextBounds(str, 0, str.length(), rect);
paint.setTextAlign(Paint.Align.LEFT);
canvas.drawText(str, - rect.left,200, paint);
// 小字体
paint.setTextSize(100);
paint.getTextBounds(str, 0, str.length(), rect);
paint.setTextAlign(Paint.Align.LEFT);
canvas.drawText(str, - rect.left,300, paint);
}
}