1. 程式人生 > >自定義控制元件之文字繪製

自定義控制元件之文字繪製

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);