Canvas 文字对齐方式
Canvas 文字对齐方式
常用的画文字的方法
public void drawText (String text, float x, float y, Paint paint)
x,y 并不是指定文字的中点位置,并且x,y与文字对齐方式有关(通过setTextAlign()指定,默认为left)
测试
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
/**
* Created by talon on 2021/3/10
* note: 根据对象绘制图片
* 参考:https://www.jianshu.com/p/8b97627b21c4
*/
public class DrawBitmapManager4 {
private final String TAG = "DrawImageManager";
public static Bitmap createBitmap() {
// 创建一个画布
Bitmap bitmap = Bitmap.createBitmap(800, 1000, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bitmap, 0, 0, null);
// 给画布加个边框
Rect rect = new Rect(0, 0, canvas.getWidth(), canvas.getHeight());
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
canvas.drawRect(rect, paint);
// 开始测试数据
// todo 证明: setStrokeWidth这个方法,并不是往canvas内侧填充,而是往外侧增加一半,往内侧增加一半。
// testStrokeWidth(canvas);
// todo 证明:文字居中方案
setTextCenter(canvas); // 居中
setTextLeft(canvas); // 左对齐
setTextRight(canvas); // 右对齐
return bitmap;
}
private static void testStrokeWidth(Canvas canvas) {
// 划粗400px的线,只填充了200px
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(400);
canvas.drawLine(0, 0, 0, canvas.getHeight(), paint);
// 划线
paint.setColor(Color.RED);
paint.setStrokeWidth(5);
canvas.drawLine(210, 0, 210, canvas.getHeight(), paint);
}
private static void setTextCenter(Canvas canvas) {
//矩形背景
Paint bgRect = new Paint();
bgRect.setStyle(Paint.Style.FILL);
bgRect.setColor(Color.TRANSPARENT);
RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
canvas.drawRect(rectF, bgRect);
Paint textPaint = new Paint();
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextSize(100);
textPaint.setTextAlign(Paint.Align.CENTER);
String text = "测Zz试";
//计算baseline ;
Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
float distance = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
float baseline = rectF.centerY() + distance;
canvas.drawText(text, rectF.centerX(), baseline, textPaint);
// 划线标记中间位置
textPaint.setColor(Color.RED);
textPaint.setStrokeWidth(5);
canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, textPaint);
}
private static void setTextLeft(Canvas canvas) {
//矩形背景
Paint bgRect = new Paint();
bgRect.setStyle(Paint.Style.FILL);
bgRect.setColor(Color.TRANSPARENT);
RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
canvas.drawRect(rectF, bgRect);
Paint textPaint = new Paint();
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextSize(100);
textPaint.setTextAlign(Paint.Align.LEFT);
String text = "测Zz试";
//计算baseline ;
Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
float distance = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
float baseline = rectF.centerY() + distance;
canvas.drawText(text, rectF.left, baseline, textPaint);
// 划线标记中间位置
textPaint.setColor(Color.RED);
textPaint.setStrokeWidth(5);
canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, textPaint);
}
private static void setTextRight(Canvas canvas) {
//矩形背景
Paint bgRect = new Paint();
bgRect.setStyle(Paint.Style.FILL);
bgRect.setColor(Color.TRANSPARENT);
RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
canvas.drawRect(rectF, bgRect);
Paint textPaint = new Paint();
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextSize(100);
textPaint.setTextAlign(Paint.Align.RIGHT);
String text = "测Zz试";
//计算baseline ;
Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
float distance = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
float baseline = rectF.centerY() + distance;
canvas.drawText(text, rectF.right, baseline, textPaint);
// 划线标记中间位置
textPaint.setColor(Color.RED);
textPaint.setStrokeWidth(5);
canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, textPaint);
}
}
还没有评论,来说两句吧...