項(xiàng)目中做了一個涂鴉的效果翩肌,手指快速移動念祭,會出現(xiàn)折線粱坤,這篇文章記錄筆觸優(yōu)化站玄。
優(yōu)化前
2017-10-16-17-02-16.jpg
優(yōu)化
設(shè)計到的類:Paint
,Path
Path
類記錄了坐標(biāo)點(diǎn)集合決定線條軌跡,Paint
決定怎么畫
Paint處理
//連接的外邊緣以圓弧的方式相交
paint.setStrokeJoin(Paint.Join.ROUND);
//線條結(jié)束處繪制一個半圓
paint.setStrokeCap(Paint.Cap.ROUND);
Path處理
這里用的到有個叫貝塞爾曲線的概念。關(guān)于貝塞爾曲線公式晾剖,它是依據(jù)幾個位置任意的點(diǎn)坐標(biāo)繪制出的一條光滑曲線。
在Path添加點(diǎn)坐標(biāo)的時候雕什,使用Path#quadTo(float,float,float,float) 代替 Path#lineTo(float,float)。
- lineTo(float,float) 從上一個點(diǎn)到某個指定的點(diǎn)新增一條線
- quadTo(float,float,float,float) 從上一個點(diǎn)到某個指定的點(diǎn)新增一條二次方的貝塞爾曲線
項(xiàng)目中用的時候磷雇,又小優(yōu)化了一下螟蒸,代碼如下:
if (Math.abs(lastX - x) < 3 && Math.abs(lastY - y) < 3) {
} else {
mPath.quadTo(lastX, lastY, (x + lastX) / 2, (y + lastY) / 2);
lastX = x ;
lastY = y ;
}
效果
2017-10-16-18-18-13.jpg
線條拐彎處是不是平滑了很多,仔細(xì)的童鞋可能會發(fā)現(xiàn)整個線條有參差不齊的感覺诵原,這個是抖動導(dǎo)致的,這個我們以后再說吗蚌。