Android 塗鴉最佳實踐

2021-09-07 05:44:10 字數 1651 閱讀 6193

android中實現手勢畫圖一般都兩種方式,一是直接在view上繪製,而是使用su***ceview。

兩者還是有一些差別的。簡介下。

view:顯示檢視,內建畫布,提供圖形繪製函式、觸屏事件、按鍵事件函式等;必須在ui主線程內更新畫面。速度較慢。 su***ceview:基於view檢視進行拓展的檢視類。更適合2d遊戲的開發;是view的子類,使用雙緩機制。在新的執行緒中更新畫面所以重新整理介面速度比view快。所以呢,要實現塗鴉的功能優先選擇後者。

在開始碼**之前,先簡單理下要實現的功能。

1、能夠自己定義畫筆的顏色

2、能夠自己定義畫筆的粗細

3、能夠實現各種常見形狀的繪製

4、同意畫布的回退,就是回到上一步

5、要支援橡皮擦功能

6、已作完的畫,要支援儲存

以下我們就逐步去實現這五個功能點。

一、關於自己定義畫筆的顏色和粗細。這個最簡單,僅僅須呼叫paint的setcolor(int color)和setstrokewidth(float width)這兩個方法就可以。須要基本的是,使用su***ceview畫圖須要注意是通過su***ceholder獲得canvas例項,這時能夠通過canvas例項去畫圖,繪製結束呼叫unlockcanvasandpost(canvas)去提交改變。

二、支援自由曲線、直線、矩形、圓形、實心矩形、實心圓形,非常方便的進行擴充套件。

這裡先抽象出乙個基類action,每一次的繪製都是乙個action例項,我們的畫板就是乙個action的列表。這樣就能非常好的支援回退功能。

三、畫布的回退。假設畫布上的action列表大小不為0,表示畫布眼下是支援回退的,僅僅須把列表中最後乙個action給remove掉,又一次繪製就ok了

四、橡皮擦。這裡我取了個巧。畫布的背景是白色的。所以橡皮擦的實現也是乙個action,形狀為自由曲線,顏色也為白色,這樣就營造了一種被擦除的效果。事實上僅僅是被白色的曲線給遮蓋住了。

依照第三點的實現,橡皮擦也支援回退。

五、儲存畫板。畫布上畫滿了你的各種圖形,最後一步就是儲存了,可是view和su***ceview的擷取是不同的,view是靜態的被動的,su***ceview是主動的動態的,假設使用view的截圖方法僅僅能得到乙個黑屏。

這時好辦法就是把咱們儲存的action列表又一次繪製出來。**例如以下

android乾貨分享(id:android_share)

android最佳實踐(五)

這是乙個系列,我們將其命名為android最佳實踐,如果你還沒有看之前的文章 android最佳實踐 一 android最佳實踐 二 android最佳實踐 三 android最佳實踐 四 上一節,我們編寫了contact模組,該模組能夠很方便的使用聯絡人和自定義聯絡人介面,春節過後,我編寫了基於o...

Android登入頁面的最佳實踐

在應用開發的過程中,有次ui設計的頁面讓我為難了,要求頁面如下 左側是標題,右側是輸入框,要求標題左對齊,輸入框左右對齊,同時表單中標題字數長度不等。當時分析了常用的線性布局和相對布局之後都沒有漂亮的解決辦法。由於專案的時間要求,我只能讓每一行都用線性布局,標題設定最大長度,這樣子的缺點就是不同的手...

最佳實踐 Flutter 最佳實踐

最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高 質量 可讀性 可維護性和健壯性都非常重要。讓我們探索一些設計和開發flutter應用程式的最佳實踐。class enum typedef和extension應採用駝峰命名uppercamelcase規則。class mainscree...