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所示的显示效果。
Android 下paint各大方法小结_第1张图片 
图8.5  设置字体大小
Android 下paint各大方法小结_第2张图片 
图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);// 画笔宽度


你可能感兴趣的:(图像处理)