欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)Path平滑的涂鴉效果實例

 更新時間:2017年10月17日 08:58:52   作者:滿月寫  
這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)Path平滑涂鴉效果的相關(guān)資料,通過本文介紹的方法修改后會讓線條平滑很多,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

在最近的一個項目中做了一個涂鴉的效果,手指快速移動,會出現(xiàn)折線,這篇文章記錄筆觸優(yōu)化。下面話不多說了,來一起看看詳細(xì)的介紹吧。

優(yōu)化前


優(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)新增一條二次方的貝塞爾曲線

項目中用的時候,又小優(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 ;
 }

效果


線條拐彎處是不是平滑了很多,仔細(xì)的童鞋可能會發(fā)現(xiàn)整個線條有參差不齊的感覺,這個是抖動導(dǎo)致的,這個我們以后再說。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論