作者:miaowmiaow來源:https://juejin.cn/post/7013274417766039560
前言
產品拿着IOS的微信圖片編輯給我看了下說:「這個功能應該很簡單吧,你應該很快就能做好吧」。如果當時我的桌子上有塊🧱的話,估計就是另一個結局了。😂 吐槽結束,先來看效果圖吧
來吧,展示
本圖片編輯器實現了IOS微信圖片編輯除表情貼紙外的所有功能包括用戶體驗。源代碼在1000行左右,閱讀起來基本沒有難度,非常適合二次開發。實現功能:塗鴉、貼紙、文字、馬賽克、裁剪
主要知識點:
Canvas
Xfermode
GestureDetector
ScaleGestureDetector
快速使用1PictureEditorDialog.newInstance()2.setBitmapPath(path)3.setEditorFinishCallback(object:EditorFinishCallback{4overridefunonFinish(path:String){5valbitmap=BitmapFactory.decodeFile(path,BitmapFactory.Options())6}7})8.show(fragmentManager)
如上所示:
通過PictureEditorDialog調用圖片編輯器
通過setBitmapPath(path)傳入圖片路徑
通過setEditorFinishCallback(callback)獲取編輯後的圖片地址
如果覺得PictureEditorDialog不能滿足需求,還可以通過PictureEditorView來自定義樣式
自定義使用 1<com.example.miaow.picture.editor.PictureEditorView 2android:id="@+id/pic_editor" 3android:layout_width="match_parent" 4android:layout_height="match_parent"/> 5 6 7 8picEditor.setBitmapPath(path) 9picEditor.setMode(PictureEditorView.Mode.STICKER)10picEditor.setGraffitiColor(Color.parseColor("#ffffff"))11picEditor.setSticker(StickerAttrs(bitmap))12picEditor.graffitiUndo()13picEditor.mosaicUndo()14picEditor.saveBitmap()
如上所示:
通過setBitmapPath(path)傳入圖片路徑
通過setMode(mode)設置編輯模式,分別有:塗鴉,橡皮擦,馬賽克,貼紙
通過setGraffitiColor(color)設置塗鴉畫筆顏色
通過setSticker(StickerAttrs(bitmap))設置貼紙
通過graffitiUndo()塗鴉撤銷
通過mosaicUndo()馬賽克撤銷
通過saveBitmap()保存編輯圖片
PictureEditorView就介紹到這裡,具體使用請查看PictureEditorDialog
圖片裁剪 1<com.example.miaow.picture.editor.PictureClipView 2android:id="@+id/clip" 3android:layout_width="match_parent" 4android:layout_height="match_parent"/> 5 6 7 8clip.setBitmapResource(bitmap) 9clip.rotate()10clip.reset()11clip.saveBitmap()
如上所示:
通過setBitmapResource(bitmap)傳入裁剪圖片
通過clip.rotate()圖片旋轉
通過clip.reset()圖片重置
通過clip.saveBitmap()保存裁剪框內圖片
PictureClipView就介紹到這裡,具體使用請查看PictureClipDialog
講在最後,如無法加載圖片,請確認存儲權限
Thanks
以上就是本篇文章的全部內容,如有問題歡迎指出,我們一起進步。如果喜歡的話希望點個讚吧,您的鼓勵是我前進的動力。謝謝~~
項目地址
github:github.com/miaowmiaow/…
推薦閱讀:
AndroidIO監控 | 性能監控系列
程序員該如何寫好自己的簡歷,一位 5 年中大廠老哥跟你聊聊
面試官:簡歷上最好不要寫Glide,不是問源碼那麼簡單
一文學會字節碼替換,再也不用擔心隱私合規審核
ConstraintLayout最詳細使用,減少嵌套優化ui,提升app性能
Android 代碼覆蓋率如何實現
