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