自定義控制元件之文字繪製
阿新 • • 發佈:2018-12-28
paint與文字設定相關的方法如下
paint.setStrokeWidth(5);//畫筆寬度 paint.setColor(Color.RED);//設定顏色 paint.setAntiAlias(true);//抗鋸齒功能 paint.setStyle(Paint.Style.FILL);//樣式 paint.setTextAlign(Paint.Align.CENTER);//文字對齊方式 paint.setTextSize(50);//設定文字大小 paint.setFakeBoldText(true);//設定是否為粗體 paint.setUnderlineText(true);//設定下畫線 paint.setTextSkewX(-0.25f);//字型傾斜度,一般設定為-0.25 paint.setStrikeThruText(true);//設定帶有刪除線效果 paint.setTextScaleX(2);//水平拉伸,高度不會變
示例程式碼
/** * 填充樣式的區別 * @param canvas */ private void setStyle(Canvas canvas){ Paint paint=new Paint(); paint.setColor(Color.RED); //設定畫筆顏色 paint.setStrokeWidth (5);//設定畫筆寬度 paint.setAntiAlias(true); //指定是否使用抗鋸齒功能,如果使用,會使繪圖速度變慢 paint.setTextSize(80);//設定文字大小 //繪圖樣式,設定為填充 paint.setStyle(Paint.Style.FILL); canvas.drawText("床前明月光", 10,100, paint); }/** * setTextAlign * @param canvas */ private void setAlign(Canvas canvas){ Paint paint=new Paint(); paint.setColor(Color.RED); paint.setStrokeWidth (5); paint.setAntiAlias(true); paint.setTextSize(80); paint.setTextAlign(Paint.Align.RIGHT); canvas.drawText("床前明月光", 400,100, paint); } /** * 設定字型樣式_常規設定 * @param canvas */ private void setTextStyle(Canvas canvas){ Paint paint=new Paint(); paint.setColor(Color.RED); paint.setTextSize(80); canvas.drawText("床前明月光", 10,100, paint); paint.setFakeBoldText(true);//設定是否為粗體文字 paint.setUnderlineText(true);//設定下劃線 paint.setStrikeThruText(true);//設定帶有刪除線效果 canvas.drawText("床前明月光", 10,250, paint); } /** * 設定字型樣式_字型傾斜度設定 * @param canvas */ private void setTextSkewX(Canvas canvas){ Paint paint=new Paint(); paint.setColor(Color.RED); paint.setTextSize(80); //正常樣式 canvas.drawText("床前明月光", 10,100, paint); //向右傾斜 paint.setTextSkewX(-0.25f); canvas.drawText("床前明月光", 10,200, paint); //向左傾斜 paint.setTextSkewX(0.25f); canvas.drawText("床前明月光", 10,300, paint); } /** * 水平拉伸 * @param canvas */ private void setTextScaleX(Canvas canvas){ Paint paint=new Paint(); paint.setColor(Color.RED); paint.setTextSize(80); //正常樣式 canvas.drawText("床前明月光", 10,100, paint); //拉伸兩倍 paint.setTextScaleX(2); canvas.drawText("床前明月光", 10,200, paint); }
其他方法繪製
/** * 普通繪製 * * @param canvas */ private void drawSubText(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); paint.setTextSize(80); canvas.drawText("床前明月光", 2, 4, 10, 100, paint); } /** * 逐個指定文字位置 */ private void drawPosText(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); paint.setTextSize(80); float[] pos = new float[]{80, 100, 80, 200, 80, 300, 80, 400}; canvas.drawPosText("床前明月", pos, paint); //pos繪製每個文字的具體位置,兩兩一組 } /** * 沿路徑繪製 * @param canvas */ private void drawPathText(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStrokeWidth(5); paint.setTextSize(45); paint.setStyle(Paint.Style.STROKE); //先建立兩個相同的圓形路徑,並先畫出兩個路徑原圖 Path circlePath = new Path(); circlePath.addCircle(220, 300, 150, Path.Direction.CCW);//逆向繪製 canvas.drawPath(circlePath, paint);//繪製出路徑原形 Path circlePath2 = new Path(); circlePath2.addCircle(600, 300, 150, Path.Direction.CCW); canvas.drawPath(circlePath2, paint);//繪製出路徑原形 String string = "床前明月光,疑是地上霜"; paint.setColor(Color.GREEN); //hoffset、voffset引數值全部設為0,看原始狀態是怎樣的 canvas.drawTextOnPath(string, circlePath, 0, 0, paint); //第二個路徑,改變hoffset、voffset引數值 canvas.drawTextOnPath(string, circlePath2, 80, 30, paint); } /** * 自字義字型 * @param canvas */ private void drawCustomFont(Canvas canvas){ //自定義字型,,,迷你簡羅卜 Paint paint=new Paint(); paint.setColor(Color.RED); paint.setTextSize(60); AssetManager mgr= mContext.getAssets();//得到AssetManager //根據路徑得到Typeface Typeface typeface=Typeface.createFromAsset(mgr, "fonts/jian_luobo.ttf"); paint.setTypeface(typeface);//設定字型樣式 canvas.drawText("床前明月光,疑是地上霜",10,550, paint); }
defaultFromStyle函式
public static Typeface defaultFromStyle(int style)
該函式會指定字型樣式獲取對於的預設字型,取值如下
BOLD 粗體
BOLD_ITALIC粗斜體
ITALIC斜體
NORMAL 正常字型 預設
示例
Typeface typeface = Typeface.defaultFromStyle(Typeface.BOLD);
paint.setTypeface(typeface);
Typeface 中create函式
該函式直接通過指定字型名來載入系統中自帶的字型樣式,如果字型不存在,則使用系統樣式代替返回
示例:
Typeface typeface = Typeface.create("宋體",Typeface.NORMAL);
paint.setTypeface(typeface);