Android實現(xiàn)Path平滑的涂鴉效果實例
前言
在最近的一個項目中做了一個涂鴉的效果,手指快速移動,會出現(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)文章
android studio 新手入門教程(二)項目的導(dǎo)入教程圖解
這篇文章主要介紹了android studio 新手入門教程(二)項目的導(dǎo)入教程圖解,需要的朋友可以參考下2017-12-12Android SQLite數(shù)據(jù)庫增刪改查操作的使用詳解
本篇文章介紹了,在Android中SQLite數(shù)據(jù)庫增刪改查操作的使用詳解。需要的朋友參考下2013-04-04android 仿微信demo——微信消息界面實現(xiàn)(服務(wù)端)
本系列文章主要介紹了微信小程序-閱讀小程序?qū)嵗╠emo),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能給你們提供幫助2021-06-06超簡單實現(xiàn)Android自定義Toast示例(附源碼)
本篇文章主要介紹了超簡單實現(xiàn)Android自定義Toast示例(附源碼),具有一定的參考價值,有興趣的可以了解一下。2017-02-02Android中使用DialogFragment編寫對話框的實例教程
這篇文章主要介紹了Android中使用DialogFragment編寫對話框的實例教程,DialogFragment也是一種Fragment,因而管理生命周期時比較給力,需要的朋友可以參考下2016-04-04Android中WebView加載網(wǎng)頁設(shè)置進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android中WebView加載網(wǎng)頁設(shè)置進(jìn)度條的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04詳解LeakCanary分析內(nèi)存泄露如何實現(xiàn)
這篇文章主要為大家介紹了詳解LeakCanary分析內(nèi)存泄露如何實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12