Paint属性简单了解

1.Paint 属性

        mPaint.setColor(Color.RED)//设置颜色
        mPaint.isAntiAlias = true //是否抗锯齿
        mPaint.setARGB(255, 255, 255, 0) //设置paint对象颜色 0-255
        mPaint.alpha = 200 //设置透明度
        mPaint.style = Paint.Style.STROKE // 描边填充效果 1.STROKE 描边 2.FIll 填充 3.FILL_AND_STROKE 描边+填充
        mPaint.strokeWidth = 5F // 描边宽度

        mPaint.strokeCap = Paint.Cap.SQUARE //圆角效果 1.STROKE 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加上矩形
        mPaint.strokeJoin = Paint.Join.MITER // 拐角  1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圆形
        mPaint.setShader(SweepGradient(200F, 200F, Color.RED, Color.BLUE)) //渲染器
        mPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.ADD))//设置图层混合模式
        mPaint.setColorFilter(LightingColorFilter(0xffffff, 0x235545)) //颜色过滤器
        mPaint.isFilterBitmap = true //设置双线性过滤(比图一张很像马赛克的图片过滤后就柔和很多,马赛克变成模糊的)
        mPaint.setMaskFilter(BlurMaskFilter(10F, BlurMaskFilter.Blur.INNER)) //画笔遮罩滤镜,传入度数和滤镜
        mPaint.textScaleX = 2F //文本缩放
        mPaint.textSize = 40F //文本大小
        mPaint.textAlign = Paint.Align.CENTER //文本对齐方式
        mPaint.isUnderlineText = true

        val str = "我的学习之路"
        var mRect = Rect()
        mPaint.getTextBounds(str, 0, str.length, mRect) //将文本放到rect区域中
        mPaint.measureText(str)//文本的宽度
        mPaint.fontMetrics //获取字体的度量对象

2.属性详解

主要是用代码实现那些属性的效果

基本设置的代码

    var mPaint = Paint()
    init {
        mPaint.setARGB(255, 255, 0, 0)
        mPaint.isAntiAlias = true //是否抗锯齿
        mPaint.style = Paint.Style.STROKE // 描边填充效果 1.STROKE 描边 2.FIll 填充 3.FILL_AND_STROKE 描边+填充
        mPaint.strokeWidth = 50F // 描边宽度
    }

1.拐角

以下从左到右边的效果是: 1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圆形

001.jpg
     override fun draw(canvas: Canvas?) {
        super.draw(canvas)
        strokeJoin(canvas)
    }
    fun strokeJoin(canvas: Canvas?){
        mPaint.strokeJoin = Paint.Join.MITER // 拐角  1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圆形
        canvas?.drawPath(strokeJoin(0),mPaint)
        mPaint.strokeJoin = Paint.Join.BEVEL // 拐角  1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圆形
        canvas?.drawPath(strokeJoin(1),mPaint)
        mPaint.strokeJoin = Paint.Join.ROUND // 拐角  1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圆形
        canvas?.drawPath(strokeJoin(2),mPaint)
    }
    fun strokeJoin(num:Int):Path{
        var path = Path()
        path.moveTo(300F*num+50F,50F)
        path.lineTo(300F*num+250F,50F)
        path.lineTo(300F*num+50F,200F)
        return path
    }

2.圆角

下图从上到下分别是 圆角效果 1.BUTT 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加

002.jpg
    override fun draw(canvas: Canvas?) {
        super.draw(canvas)
        strokeCap(canvas)
    }
    fun strokeCap(canvas: Canvas?){
        mPaint.strokeCap = Paint.Cap.BUTT//圆角效果 1.BUTT 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加上矩形
        canvas?.drawLine(50F,50F,600F,50F,mPaint)
        mPaint.strokeCap = Paint.Cap.ROUND//圆角效果 1.BUTT 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加上矩形
        canvas?.drawLine(50F,150F,600F,150F,mPaint)
        mPaint.strokeCap = Paint.Cap.SQUARE//圆角效果 1.BUTT 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加上矩形
        canvas?.drawLine(50F,250F,600F,250F,mPaint)
    }

3.渲染器

注意:Shader后面会做一个详细的讲解 开启传送门

1.简介

Shader.TileMode 三个类型
1.CLAMP
当填充区域大于填充物,会以填充物体最后一个像素水平或者垂直方向上的延申
2.REPEAT
以填充物水平和垂直方向上的复制平铺填充
3.MIRROR(镜像)
以填充物水平或者垂直方向上的翻转平铺填充

2.简单效果

setShader()这个方法后面还有个详细讲解


003.jpg
    override fun draw(canvas: Canvas?) {
        super.draw(canvas)
        setShader(canvas)
    }
    fun setShader(canvas: Canvas?){
        canvas?.drawLine(50F,50F,600F,50F,mPaint)
        mPaint.setShader(SweepGradient(200F, 200F, Color.RED, Color.YELLOW)) //环形渲染器
        canvas?.drawLine(50F,150F,600F,150F,mPaint)
    }

2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。