Android 下paint各大方法小结


一.aint.ascent()和paint.descent()


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字体。

【实例演示】下面通过代码来演示如何设置字体样式。

  
  
  1. protected void onDraw(Canvas canvas) {                  //重载onDraw方法  
  2.     // TODO Auto-generated method stub  
  3.     super.onDraw(canvas);  
  4.     paint.setColor(Color.RED);                          //设置画笔颜色  
  5.     paint.setTypeface(Typeface.SANS_SERIF);             //设置字体样式  
  6.     canvas.drawColor(Color.WHITE);  
  7.     paint.setTextSize(20);                          //设置画笔字体的大小  
  8.     canvas.drawText("Hello Android!", 10, 50, paint);  
  9.     paint.setTextSize(30);                          //设置画笔字体的大小  
  10.     canvas.drawText("Hello Android!", 10, 150, paint);  
  11.     paint.setTextSize(40);                          //设置画笔字体的大小  
  12.     canvas.drawText("Hello Android!", 10, 250, paint);  
  13.     paint.setTextSize(50);                          //设置画笔字体的大小  
  14.     canvas.drawText("Hello Android!", 10, 350, paint);  
  15. }  
在这段代码中,首先设置了画笔的颜色,然后使用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宽度


  1. String str = "Hello";  
  2. canvas.drawText( str , x , y , paint);  
  3.   
  4. //1. 粗略计算文字宽度  
  5. Log.d(TAG, "measureText=" + paint.measureText(str));  
  6.   
  7. //2. 计算文字所在矩形,可以得到宽高  
  8. Rect rect = new Rect();  
  9. paint.getTextBounds(str, 0, str.length(), rect);  
  10. int w = rect.width();  
  11. int h = rect.height();  
  12. Log.d(TAG, "w=" +w+"  h="+h);  
  13.   
  14. //3. 精确计算文字宽度  
  15. int textWidth = getTextWidth(paint, str);  
  16. Log.d(TAG, "textWidth=" + textWidth);  
  17.   
  18.     public static int getTextWidth(Paint paint, String str) {  
  19.         int iRet = 0;  
  20.         if (str != null && str.length() > 0) {  
  21.             int len = str.length();  
  22.             float[] widths = new float[len];  
  23.             paint.getTextWidths(str, widths);  
  24.             for (int j = 0; j < len; j++) {  
  25.                 iRet += (int) Math.ceil(widths[j]);  
  26.             }  
  27.         }  
  28.         return iRet;  
  29.     } 


计算出当前绘制出来的字符串有多宽,可以这么来!
方法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);// 画笔宽度


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值