Adroid Paint屬性

Paint mPaint = new Paint();//初始化畫筆
mPaint.setColor(Color.BLUE);//設置畫筆顏色
mPaint.setAlpha(255);//設置透明度 0-255
mPaint.setStrokeWidth(3);//設置畫筆寬度
canvas.drawLine(100,100,300,100,mPaint);//畫線
// mPaint.setStyle ()
// Paint.Style.FILL 只繪製圖形內容
// Paint.Style.STROKE 只繪製圖形輪廓(描邊)
// Paint.Style.FILL_AND_STROKE 既繪製輪廓也繪製內容
mPaint.reset();//重置
String DRAW_TEXT = "塗文遠";
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(3);
mPaint.setTextSize(100);
mPaint.setAntiAlias(true);//獲取與設置是否使用抗鋸齒功能,會消耗較大資源,繪製圖形速度會變慢,一般會開啓。設置後會平滑一些;
mPaint.setDither(true);//獲取與設定是否使用圖像抖動處理,會使繪製出來的圖片顏色更加平滑和飽滿、圖像更加清晰。
//測量文本高
Rect textBounds = new Rect();
mPaint.getTextBounds(DRAW_TEXT, 0, DRAW_TEXT.length(), textBounds);
int textH = textBounds.height();
mPaint.setStyle(Paint.Style.STROKE);
canvas.drawText(DRAW_TEXT,0,100+textH*0,mPaint);

mPaint.setStyle(Paint.Style.FILL);
canvas.drawText(DRAW_TEXT,0,100+textH*1,mPaint);

mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawText(DRAW_TEXT,0,100+textH*2,mPaint);

//mPaint.setStrokeCap
//Paint.Cap.BUTT(無線冒)
//Paint.Cap.ROUND(圓形線冒)
//Paint.Cap.SQUARE(方形線冒)
mPaint.reset();
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(50);

mPaint.setStrokeCap(Paint.Cap.BUTT);
canvas.drawLine(100,100,300,100,mPaint);

mPaint.setStrokeCap(Paint.Cap.ROUND);
canvas.drawLine(100,200,300,200,mPaint);

mPaint.setStrokeCap(Paint.Cap.SQUARE);
canvas.drawLine(100,300,300,300,mPaint);

//mPaint.setStrokeJoin();
//Paint.Join.BEVEL 結合處爲直線
//Paint.Join.ROUND 結合處爲圓弧
//Paint.Join.MITER 結合處爲銳角
mPaint.reset();
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(50);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setAntiAlias(true);
Path path = new Path();
path.moveTo(100,100);
path.lineTo(300,100);
path.lineTo(100,300);
path.close();
mPaint.setStrokeJoin(Paint.Join.BEVEL);
canvas.drawPath(path,mPaint);

Path path1 = new Path();
path1.moveTo(100,400);
path1.lineTo(300,400);
path1.lineTo(100,600);
path1.close();
mPaint.setStrokeJoin(Paint.Join.ROUND);
canvas.drawPath(path1,mPaint);

Path path2 = new Path();
path2.moveTo(100,700);
path2.lineTo(300,700);
path2.lineTo(100,900);
path2.close();
mPaint.setStrokeJoin(Paint.Join.MITER);
canvas.drawPath(path2,mPaint);

Paint之setXfermode--圖形混合模式

setXfermode(Xfermode xfermode)

  • 在繼承Xfermode這個類有三個子類AvoidXfermode,PixelXorXfermode,PorterDuffXfermode
  • AvoidXfermode,PixelXorXfermode是完全不支持硬件加速的,而PorterDuffXfermode是部分不支持的
public class TestPaintView extends View {

    private final Bitmap srcBmp;//源圖像
    private final Bitmap dstBmp;//目標圖像
    private final Paint mPaint;

    public TestPaintView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        srcBmp = makeSrc(400, 400);
        dstBmp = makeDst(400, 400);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int layerID = canvas.saveLayer(0,0,800,800,mPaint,Canvas.ALL_SAVE_FLAG);
        canvas.drawBitmap(dstBmp, 0, 0, mPaint);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        canvas.drawBitmap(srcBmp,200,200, mPaint);
        mPaint.setXfermode(null);
        canvas.restoreToCount(layerID);
    }

    // create a bitmap with a circle, used for the "dst" image
    static Bitmap makeDst(int w, int h) {
        Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bm);
        Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
        p.setColor(0xFFFFCC44);
        c.drawOval(new RectF(0, 0, w, h), p);
        return bm;
    }
    // create a bitmap with a rect, used for the "src" image
    static Bitmap makeSrc(int w, int h) {
        Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bm);
        Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
        p.setColor(0xFF66AAFF);
        c.drawRect(0, 0, w, h, p);
        return bm;
    }

}

PorterDuff.Mode

//setMaskFilter(MaskFilter maskfilter);
//設置MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等
//MaskFilter的兩個子類BlurMaskFilter和EmbossMaskFilter
mPaint.setColor(Color.RED);
setLayerType(LAYER_TYPE_SOFTWARE,null);//關閉硬件加速
//第一個參數:radius很容易理解,值越大我們的陰影越擴散,用過PS的人會很容易理解,其實就是陰影範圍。
//第二個參數:style表示的是模糊的類型 SOLID,NORMAL,OUTER和INNER
mPaint.setMaskFilter(new BlurMaskFilter(20,BlurMaskFilter.Blur.SOLID));//這個方法已經被標註爲過時的方法了,如果你的應用啓用了硬件加速,你是看不到任何陰影效果的。
canvas.drawRect(200,200,600,600,mPaint);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章