自定义 view - paint

作者: 前行的乌龟 | 来源:发表于2018-10-20 16:58 被阅读8次

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

    ColorMatrix 色彩矩阵

    除了上述内容外,paint 还有一些很难懂的,很理论的东西:

    • ColorMatrix 颜色滤镜
      颜色滤镜可以实现许多图片处理的效果,详细请看这个:
      * 自定义控件其实很简单1/6

    • BlurMaskFilter和EmbossMaskFilter
      前者为模糊遮罩滤镜,而后者为浮雕遮罩滤镜,BlurMaskFilter 可以实现比阴影 API 更丰富的效果,具体请看:
      * 自定义控件其实很简单1/4

    相关文章

      网友评论

        本文标题:自定义 view - paint

        本文链接:https://www.haomeiwen.com/subject/wujpzftx.html