1. 程式人生 > >android中實現毛筆效果(View 中畫圖)

android中實現毛筆效果(View 中畫圖)

方法 繪畫 object android中 validate 滑動 一個 lineto 效果

近期有一個項目設計一個APP實現通過觸摸屏實現毛筆寫字效果。傳統的繪畫板程序直接通過Path的moveTo和LineTo便可實現簡單的線條繪畫程序。然而要達到毛筆的筆鋒效果則須要更為具體點的設計。我的實現思路是通過以觸摸事件DOWN、MOVE、UP中的每個點為圓心畫圓,除此之外還可通過觸摸壓力的大小改變所繪圓的半徑,這樣一連串的圓便可粗略地模擬毛筆筆鋒效果,在設計次效果時遇到兩個問題:

1:android觸摸中的MOVE時間取點的頻率不是非常高,會隔一定的像素取點。當輕觸滑動時會出現一天不連續圓的情況,明顯不符合筆鋒效果。之後我的解決的方法是在相鄰的圓之間drrawLine,畫筆的大小與圓的直徑大小幾乎相同,如此便將略顯離散的圓連起來形成連續的筆鋒效果。

2. 寫字板類似的程序說白了就是在畫布上繪制多條曲線。我的實現是在繼承自View類的OnTouch事件中將屏幕中的點保存到List中(List<List<Object>>).每加入一個點都invalidate重繪畫布(onDraw). 在onDraw函數繪制線條的時候遍歷List。每個點畫圓,圓之間通過Line連接。

測試時發現當線條過多時程序會出現卡頓現象。自習回想繪制這一過程會發現是onDraw中頻繁繪制影響了程序的效率。 在此情況下通過通過圖片緩存技術非常好的攻克了這個問題,詳細實現思路例如以下:建立一個緩沖畫布。和緩沖bitmap,onTouch事件中將圓及Line繪制到緩沖bitmap中。在onDraw函數中直接將緩沖bitmap繪制到canvas中(canvas.drawBitmap(bitmap.paint)).


當然如此設計出來的筆鋒效果還非常粗糙。後期還可通過每一筆畫的起點,轉折點及收尾點設計不同的形狀來豐富毛筆筆鋒的效果


效果圖例如以下

ps:沒書法基礎,字拙勿噴

技術分享

android中實現毛筆效果(View 中畫圖)