跳到主要內容

Android 製作簽名擷取View

前一陣子有個 Android 開發需求是做一個簽名擷取的component
查詢了Android文件後沒看到可以直接用的相關套件
原本以為應該是商用上不罕見的功能才是?
看了一下SEO排前的類似專案,大概有style另外設定、UI固定格式等等我不喜歡的因素
所以決定寫一個簡單又比較容易跟其他自訂 component 整合的View

跟Dialog整合的成果圖如下:

老實說之前沒研究Canvas相關操作
所以圖型的擷取這一段是拿授權允許再製的原始碼來改的

範例程式碼gist連結

比起程式碼,設計理念可能是更值得討論的
這段是與web上使用的功能互通,所以圖片是採用base64編碼儲存的
不過就算沒有這個理由我可能也會是用這種方式處理

在Android 6.0後的動態權限要求機制雖然是對使用者更加友好的機制
不過開發上就變得容易需要加入零碎的權限要求、判斷的程式片段
比起圖片檔案在Android上的儲存、傳送到後端平台的權限跟其他必要處理
還是把圖片轉成編碼文字來的方便
再加上簽名的大小絕對不會像圖片那樣可能來到1920以上的尺寸
編譯成文字帶來的體積增加就不算什麼成本,考慮到request發送方式還有可能減少使用流量

談到大小,我在處理這個功能時決定固定輸入範圍大小,不讓使用者能自由變更
商用上的電子簽核的效力是以意圖來看
所以簽名大小、顏色、筆觸不是影響效力的因素,不會因為簽比較大字就比較有效
不需要花很大的開發成本處理

另外因為手機的螢幕像素密度的關係,Canvas擷取的圖片會比想像中的大
網頁的簽名會以300px * 80px 的大小顯示
所以我的處理方式就先給了個固定高度
之後取得的Bitmap 先去掉底線後,再依比例壓縮成最大300 * 80 的圖片
這樣就是我理想中的簡單、又可以滿足需求的簽名擷取 component 了
有些不複雜的需求比起用 library,自己處理會更簡明省的綁手綁腳

留言