日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 开源绘画板项目 (ScaleSketchPadDemo)

發(fā)布時(shí)間:2023/12/10 Android 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 开源绘画板项目 (ScaleSketchPadDemo) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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):

  • 畫筆的細(xì)節(jié)不說了,可以去Paint API找
  • 橡皮擦的效果 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縮放
    • 單手觸摸畫線的細(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。