Android Paint的基本用法

1、paint線帽

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

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

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

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

2、Paint與Path接合,多線條連接拐角弧度,StrokeJoin

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

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

    Path path = new Path();
    path.moveTo( 100, 100 ); // 路徑path默認是在原點(0,0),當前移植到(100,100)
    path.lineTo( 400, 100 );
    path.lineTo( 200, 200 );
    paint.setStrokeJoin(Paint.Join.BEVEL );

    canvas.drawPath( path, paint );

    paint.setStyle(Paint.Style.STROKE );
    path.moveTo( 100, 300 ); // 路徑path默認是在原點(0,0),當前移植到(100,300)
    path.lineTo( 500, 300 );
    path.lineTo( 100, 500 );
    paint.setStrokeJoin(Paint.Join.ROUND );

    canvas.drawPath( path, paint );
}
Paste_Image.png

3、Paint與Path接合之PathEffect

PathEffect有6個子類,分別為DashPathEffect,PathDashPathEffect,SumPathEffect,CornerPathEffect,DiscretePathEffect,ComposePathEffect,下面會一一講解
Paste_Image.png

具體的繪制流程都交由native完成

Paste_Image.png
private void drawPathEffect( Canvas canvas ) {

    Path path = new Path();
    path.moveTo( 100, 600 ); // 路徑path默認是在原點(0,0),當前移植到(100,600)
    path.lineTo( 400, 100 );
    path.lineTo( 500, 600 );

    Paint paint = new Paint();
    paint.setColor( Color.RED );
    paint.setStrokeWidth( 3 );
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.STROKE );

    // 50,圓角, 像素
    paint.setPathEffect( new CornerPathEffect(50) );
    canvas.drawPath( path,paint );
    
    paint.setPathEffect( new CornerPathEffect(100) );
    canvas.drawPath( path,paint );
}
Paste_Image.png

具體的圓角構成,其實就相當于在頂部放置了一個半徑為radius/2的圓

4、利用path繪制簡單的路徑

private void drawMutilCornerPathEffect( Canvas canvas ) {
    Paint paint = new Paint();
    paint.setStrokeWidth( 3 );
    paint.setColor( Color.RED );
    paint.setStyle(Paint.Style.STROKE );
    paint.setAntiAlias( true );

    Path path = getPath();
    canvas.drawPath( path, paint );
    // canvas.save(); // 保存上一次繪制(畫布),保證下一次繪制不受影響
    
    paint.setPathEffect( new CornerPathEffect(10) );
    canvas.translate( 0,300 );
    canvas.drawPath( path, paint );

}

private Path getPath() {
    Path path = new Path();
    path.moveTo(0,0);
    for( int i = 1; i <= 50; i++ ) {
        path.lineTo( 20 * i, (float) (( Math.random() * 50 * i) % 200));
    }
    return path;
}
Paste_Image.png

5、DashPathEffect虛線的簡單繪制

private void drawDashPathEffect( Canvas canvas ) {
    Paint paint = new Paint();
    paint.setStrokeWidth( 3 );
    paint.setColor( Color.RED );
    paint.setStyle(Paint.Style.STROKE );
    paint.setAntiAlias( true );

    Path path = getPath();
    // DashPathEffect 畫虛線,{10,15,20,25}  10 實線,15虛線,20實線,25虛線,
    // 虛線繪制的時候會不斷的循環這個數組,0表示偏移量
    paint.setPathEffect( new DashPathEffect( new float[]{10,15,20,25}, 0) );
    canvas.translate( 0,300 );
    canvas.drawPath( path, paint );
}
Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 系列文章之 Android中自定義View(一)系列文章之 Android中自定義View(二)系列文章之 And...
    YoungerDev閱讀 2,212評論 0 4
  • 導航 Android Paint之顏色過濾器 Paint之shader(圖像渲染) Paint之PathEffec...
    侯蛋蛋_閱讀 4,654評論 0 5
  • 系列文章之 Android中自定義View(一)系列文章之 Android中自定義View(二)系列文章之 And...
    YoungerDev閱讀 4,458評論 3 11
  • 第一次在簡書上寫文章,寫的不好,請大家多多包涵。在講今天這個話題之前分享一個小故事給大家:說是出門在外兩兄弟,都帶...
    ComeOn度曲閱讀 220評論 0 0
  • 我是自大,是狂妄,但是我也懂得低調,我也知道謙虛,相處時間長了,也看清了別人,也知道了不一樣的人,去用不一樣的方法...
    607d14e3db9f閱讀 381評論 0 0