🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 1. Paint 在自定义View的时候,经常会复写onDraw方法,在这其中需要对画笔方法有个了解。比如在上篇中设置到: ~~~ var paint = Paint() paint.color = Color.BLACK // 黑色 paint.style = Paint.Style.STROKE // 不填充 paint.isAntiAlias = true // 抗锯齿 paint.isDither = true // 防抖动 paint.textSize = mFontSize // 字体大小 ~~~ 还支持设置画笔宽度: ~~~ paint.strokeWidth = 30f // 画笔宽度 ~~~ 设置线帽样式: ``` setStrokeCap(Paint.Cap cap) ``` 可以用来设置圆形、方形和无线帽。效果也就是: ![](https://img.kancloud.cn/d4/67/d4673c092cb920e31d77fed63119b105_407x397.png) 还可以设置路径样式: ``` setPathEffect(PathEffect effect) ``` 可选择使用的为其子类:ComposePathEffect、 CornerPathEffect、DashPathEffect、DiscretePathEffect、PathDashPathEffect、SumPathEffect。下面做一个简单的测试: ## 1.1 路径样式测试 ~~~ // 原始路径样式 var linePath = Path() linePath.moveTo(startX, startY) linePath.lineTo(startX + 100, startY - 100) linePath.lineTo(startX + 200, startY + 100) linePath.lineTo(startX + 300, startY) linePath.lineTo(startX + 400, startY + 100) drawPath(linePath, mPaint) ~~~ 使用ComposePathEffect: ``` public ComposePathEffect(PathEffect outerpe, PathEffect innerpe) ``` 也就是需要使用两个路径效果。它会先将第二个参数的PathEffect innerpe的特效作用于路径上,然后再在此加了特效的路径上作用第一个特效。与之对应的是: ``` public SumPathEffect(PathEffect first, PathEffect second) ``` 也就是分别对原始路径分别作用第一个特效和第二个特效。 在这里的测试中,简单设置一下画笔,这里移动画布,将几个路径特效都绘制出来: ~~~ // 原始路径样式 var linePath = Path() linePath.moveTo(startX, startY) linePath.lineTo(startX + 400, startY - 100) linePath.lineTo(startX + 600, startY + 100) linePath.lineTo(startX + 800, startY) linePath.lineTo(startX + 1000, startY + 100) drawPath(linePath, mPaint) // 圆角特效 translate(0f, 100f) var cornerPathEffect = CornerPathEffect(100f) mPaint.pathEffect = cornerPathEffect drawPath(linePath, mPaint) // 虚线特效 translate(0f, 100f) var dashPathEffect = DashPathEffect(floatArrayOf(2f,5f,10f,10f),0f) mPaint.pathEffect = dashPathEffect drawPath(linePath, mPaint) // 利用ComposePathEffect先应用圆角特效,再应用虚线特效 translate(0f, 100f) var composePathEffect = ComposePathEffect(dashPathEffect, cornerPathEffect) mPaint.pathEffect = composePathEffect drawPath(linePath, mPaint) ~~~ 结果: ![](https://img.kancloud.cn/19/45/1945262b9a0411c1d92a0651ff024d8a_846x461.png)