Android 开源绘画板项目 (ScaleSketchPadDemo)
Android繪畫板SketchPad工具
尊重原創:項目可以在 我的Github 下載
喜歡的可以給個star,歡迎持續交流
周末沒什么事情,寫了一個畫圖板Demo(ScaleSketchPadDemo),發出來與大家分享
ScaleSketchPadDemo詳細介紹
此項目包含兩個模塊
1. app1 為普通繪畫板
2. app2 為可所發的繪畫板
方便各位Android 開發者理解和使用
普通繪畫板
有五大功能:
1. 普通繪畫
2. 在圖片上繪畫
3. 改變畫筆顏色
4. 改變畫筆粗細
5. 撤銷操作
6. 添加圖片
繪畫功能
在圖片上繪畫
改變畫筆顏色
改變畫筆粗細
添加圖片
可縮放的繪畫板
app2 增加了縮放功能
雙手縮放平移VS普通狀態
如何實現?
技術點:
橡皮擦的效果 Paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
PorterDuff.Mode一共有16種混合模式,我全都試過一遍,有興趣的可以試試效果
本項目使用 PorterDuff.Mode.DST_CLEAR 實現橡皮擦效果
繪制過程使用雙緩存,具體可以看LineView中onDraw實現,以解決“黑線條”的Bug
分層思想:
- Borderview負責手勢的分發dispatch和處理ontouch
- Borderview中包含Imageview展示圖片
Lineview畫線操作 - LineView負責接收單手手勢,創建MarkPath對象,完成單手操作
- MarkPath是最終具備繪畫能力的對象,所有的繪畫功能都定制在MarkPath中,包含每個Point的設計,Path的設計,詳情看Demo
畫筆粗細和畫筆顏色都是SelectView的功能,根據不同類型的Type,顯示選擇粗細和選擇顏色界面
手勢細節:
- 雙手縮放:Borderview的dispatchTouchEvent分發手勢
- 通過 case MotionEvent.ACTION_DOWN:
return mLineView.onTouchEvent(event);將手勢傳遞給LineView, - 在MotionEvent.ACTION_UP時,控制LineView和Imageview縮放
- 通過 case MotionEvent.ACTION_DOWN:
- 單手觸摸畫線的細節:業務邏輯都在onTouch中
- 一是雙手觸摸(MotionEvent.ACTION_POINTER_DOWN:)的時候break結束此次手勢操作
- 二是單手觸摸,通過(MotionEvent.ACTION_MOVE)進行畫線操作
加入縮放效果后的難點:
- 背景圖片如何居中,
- 背景如何不越界(超出屏幕范圍)
- 縮放后,線條(Path)如何保持原有的寬度(StrockWidth)進行繪制
- 縮放后,繪制線條偏移解決方案
MarkPath所體現的面向對象的思想
本實例中,具備繪畫功能的是MarkPath對象,Borderview和Lineview只是分發處理手勢事件而已
自定義相機 詳情可以看我的博客:
http://blog.csdn.net/chivalrousman/article/details/51890716
讀取系統相冊的圖片 可以參考我的博客:
http://blog.csdn.net/chivalrousman/article/details/51771164
寫本項目的興趣,來源于6年前的一篇博客:
http://blog.sina.com.cn/s/blog_5f8817250100lqk0.html
總結
物理世界的事件傳遞:自外向內,自頂向下傳遞流程,至于“事件消費”只是輔助而已,重要的是傳遞流程
MarkPath 體現的 面向對象 思想
Borderview和Lineview的 分層思想
dispatchTouchEvent() 如何分發事件
用法
demo apk體驗下載
demo2 apk體驗下載
用法:
進入項目根目錄:github.com/ShaunSheep/…
clone or download 項目到本地,
打開Android Studio—>file—>new—>import new moudle—>選中本地的app或aap2
總結
以上是生活随笔為你收集整理的Android 开源绘画板项目 (ScaleSketchPadDemo)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LinkedHashMap的使用
- 下一篇: MFC+GDI+绘制出雷达余晖效果