Android中Paint字體的使用

1、Android中Paint字體屬性的設置: java

在Android SDK中使用Typeface類來定義字體,能夠經過經常使用字體類型名稱進行設置,如設置默認黑體: canvas


Paint mp = new paint();
mp.setTypeface(Typeface.DEFAULT_BOLD)
經常使用的字體類型名稱還有:
測試

  * Typeface.DEFAULT //常規字體類型 字體

  * Typeface.DEFAULT_BOLD //黑體字體類型 spa

  * Typeface.MONOSPACE //等寬字體類型 code

  * Typeface.SANS_SERIF //sans serif字體類型 對象

  * Typeface.SERIF //serif字體類型 圖片

除了字體類型設置以外,還能夠爲字體類型設置字體風格,如設置粗體:
Paint mp = new Paint();
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
p.setTypeface( font );
經常使用的字體風格名稱還有:
ci

  * Typeface.BOLD //粗體 字符串

  * Typeface.BOLD_ITALIC //粗斜體

  * Typeface.ITALIC //斜體

  * Typeface.NORMAL //常規


可是有時上面那些設置在繪圖過程當中是不起做用的,因此還有以下設置方式:


Paint mp = new Paint();
mp.setFakeBoldText(true); //true爲粗體,false爲非粗體
mp.setTextSkewX(-0.5f); //float類型參數,負數表示右斜,整數左斜
mp.setUnderlineText(true); //true爲下劃線,false爲非下劃線
mp.setStrikeThruText(true); //true爲刪除線,false爲非刪除線
Paint經常使用的方法還有:



mp.setTextSize(); //設置字體大小,int型,如12
mp.setStrokeWidth(w); //設置線寬,float型,如2.5f,默認繪文本無需設置(默認值好像爲0),但假如設置了,再繪製文本的時候必定要恢復到0
說明:對於中文粗體的設置,好像只能經過setFakeBoldText(true)來實現,儘管效果看起來不是很實在(字體中空效果)。實際發現,最後繪製的效果與手機硬件也有些關係,好比前面的繪圖測試程序,在HTC裏面黑體中文一行壓根沒顯示(英文和數字是正常的),而斜體一行倒顯示了,只是沒有斜體效果。魅族M9表現的很給力,多是M9定製的Android系統裏面字體庫比較豐富吧!



public void onDraw(Canvas canvas)
{
      super.onDraw(canvas);
       Paint p = new Paint();
      String familyName = 「宋體」;
      Typeface font = Typeface.create(familyName,Typeface.BOLD);
      p.setColor(Color.RED);
      p.setTypeface(font);
      p.setTextSize(22);
      canvas.drawText(mstrTitle,0,100,p);
}
2、Android獲取字體高度和設置行高



public int getFontHeight(float fontSize)  
{  
     Paint paint = new Paint();  
     paint.setTextSize(fontSize);  
     FontMetrics fm = paint.getFontMetrics();  
    return (int) Math.ceil(fm.descent - fm.top) + 2;  
}
我的更傾向於如下方式獲取字體實際高度: 



Math.ceil(fm.descent - fm.ascent);

經過實際的截圖對文字高度的肯定,後者更準確一些。

 有了字體高度信息,就能夠添加行與行之間的空隙,調整行高。

paint.setTextSize(fFontWidth);  
FontMetrics fm = paint.getFontMetrics();  
  
fFontHeight = (float)Math.ceil(fm.descent - fm.ascent);  
if(fFontHeight > fLineHeight)  
{  
     fMulValue = fLineHeight / fFontHeight;  
     fAddValue = -1;  
}  
else  
{  
     fMulValue = 1;  
     fAddValue = fLineHeight - fFontHeight;  
}  
textViewLeft.setTextSize(fFontWidth);  
textViewLeft.setLineSpacing(fAddValue, fMulValue);

實踐驗證這種方式對多種分辨率的屏幕的適應性較強。

 

3、使用自定義字體

Typeface.createFromAsset(getContext().getAssets(),"fonts/samplefont.ttf");  

paint.setFlags(Paint.ANTI_ALIAS_FLAG)   //消除鋸齒

paint.measureText(String s) //取得字符串寬度

Canvas 做爲繪製文本時,使用FontMetrics對象,計算位置的座標。

它的思路和java.awt.FontMetrics的基本相同。 

FontMetrics對象

它以四個基本座標爲基準,分別爲:

?FontMetrics.top
      ?FontMetrics.ascent
      ?FontMetrics.descent
      ?FontMetrics.bottom 

該圖片將以下 

相關文章
相關標籤/搜索