Canvas 文字对齐方式

ゝ一世哀愁。 2022-11-18 01:18 314阅读 0赞

Canvas 文字对齐方式

常用的画文字的方法

public void drawText (String text, float x, float y, Paint paint)

x,y 并不是指定文字的中点位置,并且x,y与文字对齐方式有关(通过setTextAlign()指定,默认为left)

测试

  1. import android.graphics.Bitmap;
  2. import android.graphics.Canvas;
  3. import android.graphics.Color;
  4. import android.graphics.Paint;
  5. import android.graphics.Rect;
  6. import android.graphics.RectF;
  7. /**
  8. * Created by talon on 2021/3/10
  9. * note: 根据对象绘制图片
  10. * 参考:https://www.jianshu.com/p/8b97627b21c4
  11. */
  12. public class DrawBitmapManager4 {
  13. private final String TAG = "DrawImageManager";
  14. public static Bitmap createBitmap() {
  15. // 创建一个画布
  16. Bitmap bitmap = Bitmap.createBitmap(800, 1000, Bitmap.Config.ARGB_8888);
  17. Canvas canvas = new Canvas(bitmap);
  18. canvas.drawBitmap(bitmap, 0, 0, null);
  19. // 给画布加个边框
  20. Rect rect = new Rect(0, 0, canvas.getWidth(), canvas.getHeight());
  21. Paint paint = new Paint();
  22. paint.setColor(Color.BLACK);
  23. paint.setStyle(Paint.Style.STROKE);
  24. paint.setStrokeWidth(2);
  25. canvas.drawRect(rect, paint);
  26. // 开始测试数据
  27. // todo 证明: setStrokeWidth这个方法,并不是往canvas内侧填充,而是往外侧增加一半,往内侧增加一半。
  28. // testStrokeWidth(canvas);
  29. // todo 证明:文字居中方案
  30. setTextCenter(canvas); // 居中
  31. setTextLeft(canvas); // 左对齐
  32. setTextRight(canvas); // 右对齐
  33. return bitmap;
  34. }
  35. private static void testStrokeWidth(Canvas canvas) {
  36. // 划粗400px的线,只填充了200px
  37. Paint paint = new Paint();
  38. paint.setColor(Color.BLACK);
  39. paint.setStyle(Paint.Style.STROKE);
  40. paint.setStrokeWidth(400);
  41. canvas.drawLine(0, 0, 0, canvas.getHeight(), paint);
  42. // 划线
  43. paint.setColor(Color.RED);
  44. paint.setStrokeWidth(5);
  45. canvas.drawLine(210, 0, 210, canvas.getHeight(), paint);
  46. }
  47. private static void setTextCenter(Canvas canvas) {
  48. //矩形背景
  49. Paint bgRect = new Paint();
  50. bgRect.setStyle(Paint.Style.FILL);
  51. bgRect.setColor(Color.TRANSPARENT);
  52. RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
  53. canvas.drawRect(rectF, bgRect);
  54. Paint textPaint = new Paint();
  55. textPaint.setStyle(Paint.Style.FILL);
  56. textPaint.setTextSize(100);
  57. textPaint.setTextAlign(Paint.Align.CENTER);
  58. String text = "测Zz试";
  59. //计算baseline ;
  60. Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
  61. float distance = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
  62. float baseline = rectF.centerY() + distance;
  63. canvas.drawText(text, rectF.centerX(), baseline, textPaint);
  64. // 划线标记中间位置
  65. textPaint.setColor(Color.RED);
  66. textPaint.setStrokeWidth(5);
  67. canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, textPaint);
  68. }
  69. private static void setTextLeft(Canvas canvas) {
  70. //矩形背景
  71. Paint bgRect = new Paint();
  72. bgRect.setStyle(Paint.Style.FILL);
  73. bgRect.setColor(Color.TRANSPARENT);
  74. RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
  75. canvas.drawRect(rectF, bgRect);
  76. Paint textPaint = new Paint();
  77. textPaint.setStyle(Paint.Style.FILL);
  78. textPaint.setTextSize(100);
  79. textPaint.setTextAlign(Paint.Align.LEFT);
  80. String text = "测Zz试";
  81. //计算baseline ;
  82. Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
  83. float distance = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
  84. float baseline = rectF.centerY() + distance;
  85. canvas.drawText(text, rectF.left, baseline, textPaint);
  86. // 划线标记中间位置
  87. textPaint.setColor(Color.RED);
  88. textPaint.setStrokeWidth(5);
  89. canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, textPaint);
  90. }
  91. private static void setTextRight(Canvas canvas) {
  92. //矩形背景
  93. Paint bgRect = new Paint();
  94. bgRect.setStyle(Paint.Style.FILL);
  95. bgRect.setColor(Color.TRANSPARENT);
  96. RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
  97. canvas.drawRect(rectF, bgRect);
  98. Paint textPaint = new Paint();
  99. textPaint.setStyle(Paint.Style.FILL);
  100. textPaint.setTextSize(100);
  101. textPaint.setTextAlign(Paint.Align.RIGHT);
  102. String text = "测Zz试";
  103. //计算baseline ;
  104. Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
  105. float distance = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
  106. float baseline = rectF.centerY() + distance;
  107. canvas.drawText(text, rectF.right, baseline, textPaint);
  108. // 划线标记中间位置
  109. textPaint.setColor(Color.RED);
  110. textPaint.setStrokeWidth(5);
  111. canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, textPaint);
  112. }
  113. }

发表评论

表情:
评论列表 (有 0 条评论,314人围观)

还没有评论,来说两句吧...

相关阅读