1.基准点是baseline
2.ascent:是baseline之上至字符最高处的距离
3.descent:是baseline之下至字符最低处的距离
4.leading:是上一行字符的descent到下一行的ascent之间的距离,也就是相邻行间的空白距离
5.top:是指的是最高字符到baseline的值,即ascent的最大值
6.bottom:是指最低字符到baseline的值,即descent的最大值
--------------------------------------------------------------------------------------------------------
二.setTypeface方法:设置字体样式
【功能说明】该方法用于设置画笔的字体样式,可以指定系统自带的字体,也可以使用自定义的字体。该方法是设置画笔显示文本字体的最常用方法。
【基本语法】public Typeface setTypeface ( Typeface typeface)
其中,参数typeface为字体样式,具有如下几种取值。
Typeface.DEFAULT:默认字体。
Typeface.DEFAULT_BOLD:加粗字体。
Typeface.MONOSPACE:monospace字体。
Typeface.SANS_SERIF:sans字体。
Typeface.SERIF:serif字体。
【实例演示】下面通过代码来演示如何设置字体样式。
- protected void onDraw(Canvas canvas) { //重载onDraw方法
- // TODO Auto-generated method stub
- super.onDraw(canvas);
- paint.setColor(Color.RED); //设置画笔颜色
- paint.setTypeface(Typeface.SANS_SERIF); //设置字体样式
- canvas.drawColor(Color.WHITE);
- paint.setTextSize(20); //设置画笔字体的大小
- canvas.drawText("Hello Android!", 10, 50, paint);
- paint.setTextSize(30); //设置画笔字体的大小
- canvas.drawText("Hello Android!", 10, 150, paint);
- paint.setTextSize(40); //设置画笔字体的大小
- canvas.drawText("Hello Android!", 10, 250, paint);
- paint.setTextSize(50); //设置画笔字体的大小
- canvas.drawText("Hello Android!", 10, 350, paint);
- }
在这段代码中,首先设置了画笔的颜色,然后使用setTypeface方法设置字体样式,并通过setTextSize方法设置字体大小,最后使用此画笔绘制字符串。读者运行这段代码,可以在手机屏幕上看到如图8.6所示的显示效果。
|
图8.5 设置字体大小 |
|
图8.6 设置字体样式 |
----------------------------------------------------------------------------------------------------------
三.Paint.Align
Paint.Align有3个值,分别是center,left,right,用于表示字符的位置,字符以坐标(x,y)为源点。center表示字符在水平方向上以x中心向左右两边延伸,在垂直方向以y为起点向下延伸;left表示字符在水平方向上以x为起点向右延伸,在垂直方向上以y为起点向下延伸;right表示字符在水平方向上以x为起点向左延伸,在垂直方向上以y为起点向下延伸。
___________________________________
四.paint.getTextBounds 获取text宽度
- String str = "Hello";
- canvas.drawText( str , x , y , paint);
-
-
- Log.d(TAG, "measureText=" + paint.measureText(str));
-
-
- Rect rect = new Rect();
- paint.getTextBounds(str, 0, str.length(), rect);
- int w = rect.width();
- int h = rect.height();
- Log.d(TAG, "w=" +w+" h="+h);
-
-
- int textWidth = getTextWidth(paint, str);
- Log.d(TAG, "textWidth=" + textWidth);
-
- 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;
- }
计算出当前绘制出来的字符串有多宽,可以这么来!
方法1:
Paint pFont = new Paint();
Rect rect = new Rect();
//返回包围整个字符串的最小的一个Rect区域
pFont.getTextBounds(str, 0, 1, rect);
strwid = rect.width();
strhei = rect.height();
方法2:
//直接返回参数字符串所占用的宽度
strwid = paintHead.measureText(str);
——————————————————————————————————————————————————
Paint paint = new Paint();
paint.setAntiAlias(true); //防锯齿
paint.setDither(true); //防抖动
paint.setStyle(Paint.Style.STROKE); //画笔类型 STROKE空心 FILL 实心 FILL_AND_STROKE 用契形填充
paint.setStrokeJoin(Paint.Join.ROUND); //画笔接洽点类型 如影响矩形但角的外轮廓
paint.setStrokeCap(Paint.Cap.ROUND); //画笔笔刷类型 如影响画笔但始末端
+++++
mPaint.setStrokeJoin(Paint.Join.ROUND);// 设置外边缘
mPaint.setStrokeCap(Paint.Cap.SQUARE);// 形状
mPaint.setStrokeWidth(5);// 画笔宽度