自定義 view - paint

ps:本文并不長于詳細講解 paint ,只在于記錄常用的 API 和設置

詳細講解 paint 的技術文章請看:


paint 常用 API :

// 設置顏色
paint.setColor(int color) 
// color 的取值
Color.RED  
Color.rgb(255,100,100)
Color.argb(50,255,100,100)
getResources().getColor(android.R.color.holo_blue_bright)

// 參數 alpha 透明度
paint.setAlpha(int a)

// 設置抗鋸齒
paint.setAntiAlias(boolean aa) 

// 設置文本縮放倍數
paint.setTextScaleX(float scaleX)

// 設置字符之間的間距
paint.setLetterSpacing(float size)

// 設置字體大小
paint.setTextSize(float textSize)

// 設置下劃線
paint.setUnderlineText(true)

// 設置文本刪除線
paint.setStrikeThruText(true);

// 設置畫筆的粗細
paint.setStrokeWidth(10);

下面我們來說說本文重點吧,paint 的特性

Style 填充模式


API:

mPaint.setStyle(Paint.Style.FILL); 

paint 的 Style 有3種:

  • STROKE - 描邊
  • FILL - 填充
  • FILL_AND_STROKE - 描邊加填充

做個演示看的清楚

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(40);     //為了實驗效果明顯,特地設置描邊寬度非常大

// 描邊
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(200,200,100,paint);

// 填充
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(200,500,100,paint);

// 描邊加填充
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(200, 800, 100, paint);
005Xtdi2jw1f8f0j4t36dj308c0ett8n.jpg

StrokeCap 字帽


啥叫字帽,簡單來說就是畫一條線,左邊和右邊起始點的樣式

API:

paint.setStrokeCap(Paint.Cap.BUTT);

StrokeCap 字帽有3種:

  • BUTT - 無線冒
  • ROUND - 圓形線冒
  • SQUARE - 方形線冒

跑個例子看看:

private void drawStrokeCap(Canvas canvas) {
        Paint paint = new Paint();

        paint.setAntiAlias(true);
        paint.setStrokeWidth(200);
        paint.setColor(Color.parseColor("#00ff00"));
        // 線帽,即畫的線條兩端是否帶有圓角,butt,無圓角
        paint.setStrokeCap(Paint.Cap.BUTT);       
        canvas.drawLine(200, 200, 500, 200, paint);

        paint.setColor(Color.parseColor("#ff0000"));
        // 線帽,即畫的線條兩端是否帶有圓角,ROUND,圓角
        paint.setStrokeCap(Paint.Cap.ROUND);       
        canvas.drawLine(200, 500, 500, 500, paint);

        paint.setColor(Color.parseColor("#0000ff"));
        // 線帽,即畫的線條兩端是否帶有圓角,SQUARE,矩形
        paint.setStrokeCap(Paint.Cap.SQUARE);      
        canvas.drawLine(200, 800, 500, 800, paint);
    }

StrokeJoin 折線樣式


折線樣式,簡單說就是線段折疊處的處理樣式

API:

 paint.setStrokeJoin(Paint.Join.MITER);

StrokeJoin 折線樣式有3種:

  • Paint.Join.MITER - 結合處為銳角
  • Paint.Join.Round - 結合處為圓弧
  • Paint.Join.BEVEL - 結合處為直線

跑個例子看看:

Paint paint = new Paint();

        paint.setAntiAlias( true );
        paint.setStrokeWidth( 80 );
        paint.setStyle(Paint.Style.STROKE ); // 默認是填充 Paint.Style.FILL
        paint.setColor( Color.parseColor("#0000ff") );

        Path path = new Path();
        path.moveTo(100, 100);
        path.lineTo(400, 100);
        path.lineTo(100, 300);
        paint.setStrokeJoin(Paint.Join.MITER);
        canvas.drawPath(path, paint);

        path.moveTo(100, 500);
        path.lineTo(400, 500);
        path.lineTo(100, 700);
        paint.setStrokeJoin(Paint.Join.ROUND);
        canvas.drawPath(path, paint);

        path.moveTo(100, 900);
        path.lineTo(400, 900);
        path.lineTo(100, 1100);
        paint.setStrokeJoin(Paint.Join.BEVEL);
        canvas.drawPath(path, paint);

難點

除了上述內容外,paint 還有一些很難懂的,很理論的東西:

  1. ColorMatrix 顏色濾鏡

顏色濾鏡可以實現許多圖片處理的效果,詳細請看這個:

  1. BlurMaskFilter和EmbossMaskFilter

前者為模糊遮罩濾鏡,而后者為浮雕遮罩濾鏡,BlurMaskFilter 可以實現比陰影 API 更豐富的效果,具體請看:

  1. PorterDuffXfermode

這個是圖層操作,應用也是非常廣的,簡單的畫有圖片底紋的文字可以看:

這個也只是簡單的例子,更復雜的還是要我們去仔細看

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.Asexual,無性戀者 是指一些不具有性傾向或者宣稱自己沒有性傾向的人,即不會對男性或女性任一性別表現出性傾...
    ___Moderato_閱讀 6,516評論 0 0
  • 1簡友語錄:"蠢蠢欲動"一直是個頂可愛憨厚的詞:春光下的兩條小蟲子,一鼓一縮地破土探出頭來;而眼前的世界,大地回暖...
    嵐縣程建軍閱讀 291評論 0 2
  • 別哭了…會過去的
    Mix_U閱讀 100評論 0 0
  • 不知道你是否有這樣的經歷,買回家的醬油、醋擰開蓋子后,就要完成開瓶后的最后一個動作,把內置的塑料拉環拉開,這一動作...
    流動盛宴愛碼士閱讀 687評論 1 1