Android绘画板SketchPad工具

尊重原创:项目可以在 我的Github 下载
喜欢的可以给个star,欢迎持续交流

周末没什么事情,写了一个画图板Demo(ScaleSketchPadDemo),发出来与大家分享

ScaleSketchPadDemo详细介绍

此项目包含两个模块
1. app1 为普通绘画板
2. app2 为可所发的绘画板

方便各位Android 开发者理解和使用

普通绘画板

有五大功能:
1. 普通绘画
2. 在图片上绘画
3. 改变画笔颜色
4. 改变画笔粗细
5. 撤销操作
6. 添加图片

绘画功能

在图片上绘画

改变画笔颜色

改变画笔粗细

添加图片

可缩放的绘画板

app2 增加了缩放功能

双手缩放平移VS普通状态

如何实现?

技术点:

  1. 画笔的细节不说了,可以去Paint API找
  2. 橡皮擦的效果 Paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));

    PorterDuff.Mode一共有16种混合模式,我全都试过一遍,有兴趣的可以试试效果

    本项目使用 PorterDuff.Mode.DST_CLEAR 实现橡皮擦效果

  3. 绘制过程使用双缓存,具体可以看LineView中onDraw实现,以解决“黑线条”的Bug

  4. 分层思想:

    • Borderview负责手势的分发dispatch和处理ontouch
    • Borderview中包含Imageview展示图片
      Lineview画线操作
    • LineView负责接收单手手势,创建MarkPath对象,完成单手操作
    • MarkPath是最终具备绘画能力的对象,所有的绘画功能都定制在MarkPath中,包含每个Point的设计,Path的设计,详情看Demo
  5. 画笔粗细和画笔颜色都是SelectView的功能,根据不同类型的Type,显示选择粗细和选择颜色界面

  6. 手势细节:

    • 双手缩放:Borderview的dispatchTouchEvent分发手势

      • 通过 case MotionEvent.ACTION_DOWN:
        return mLineView.onTouchEvent(event);将手势传递给LineView,
      • 在MotionEvent.ACTION_UP时,控制LineView和Imageview缩放
    • 单手触摸画线的细节:业务逻辑都在onTouch中
      • 一是双手触摸(MotionEvent.ACTION_POINTER_DOWN:)的时候break结束此次手势操作
      • 二是单手触摸,通过(MotionEvent.ACTION_MOVE)进行画线操作
  7. 加入缩放效果后的难点:

    • 背景图片如何居中,
    • 背景如何不越界(超出屏幕范围)
    • 缩放后,线条(Path)如何保持原有的宽度(StrockWidth)进行绘制
    • 缩放后,绘制线条偏移解决方案
  8. MarkPath所体现的面向对象的思想

    本实例中,具备绘画功能的是MarkPath对象,Borderview和Lineview只是分发处理手势事件而已

  9. 自定义相机 详情可以看我的博客:

    http://blog.csdn.net/chivalrousman/article/details/51890716

  10. 读取系统相册的图片 可以参考我的博客:

    http://blog.csdn.net/chivalrousman/article/details/51771164

  11. 写本项目的兴趣,来源于6年前的一篇博客:

    http://blog.sina.com.cn/s/blog_5f8817250100lqk0.html

总结

  1. 物理世界的事件传递:自外向内,自顶向下传递流程,至于“事件消费”只是辅助而已,重要的是传递流程

  2. MarkPath 体现的 面向对象 思想

  3. Borderview和Lineview的 分层思想

  4. dispatchTouchEvent() 如何分发事件

用法

demo apk体验下载

demo2 apk体验下载

用法:

进入项目根目录:github.com/ShaunSheep/…

clone or download 项目到本地,

打开Android Studio—>file—>new—>import new moudle—>选中本地的app或aap2

Android 开源绘画板项目 (ScaleSketchPadDemo)相关推荐

  1. Android开源绘画板(普通绘画模式和可缩放模式)——秒学自定义View和触摸事件原理...

    ScaleSketchPadDemo 博客园原文链接 www.cnblogs.com/jincheng-ya- 此项目包含两个模块 app1 为普通绘画板 app2 为可所发的绘画板 方便各位Andr ...

  2. android 开源远程工具项目scrcpy 简单使用

    开源项目地址: https://github.com/Genymobile/scrcpy mirrors / Genymobile / scrcpy · GitCode 这个应用程序提供通过USB或T ...

  3. Android 开源库和项目 2

    1.带尾巴的RecyclerViewPager 特点:1.像viewPager一样滑动一次就滑动一页 2.像画廊gallery一样,滑动一次可以滑动很多页 3.竖向滑动 4.支持点击事件,没有错乱   ...

  4. Android 开源项目集合

    2019独角兽企业重金招聘Python工程师标准>>> 上百个Android开源项目分享,希望对android开发有帮助. Android PDF 阅读器 http://source ...

  5. 众多Android 开源项目推荐,给力工作给力学习

    http://terryblog.blog.51cto.com/1764499/547777 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.h ...

  6. 上百个Android开源项目分享

    转载地址:[http://blog.csdn.net/bboyfeiyu/article/details/12234163] 上百个Android开源项目分享,希望对android开发有帮助. And ...

  7. 众多Android 开源项目再次推荐,学习不可错过

    FBReaderJ  FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb.ePub和fb2.此外还支持直接读取zip.tar和gzip等压缩文档. 项目地址:h ...

  8. 众多Android 开源项目推荐

    转载自:http://terryblog.blog.51cto.com/1764499/547777 不确定都是好的. FBReaderJ  FBReaderJ用于Android平台的电子书阅读器,它 ...

  9. 上百个Android开源项目分享 .

    上百个Android开源项目分享,希望对android开发有帮助. Android PDF 阅读器 http://sourceforge.net/projects/andpdf/files/ 个人记账 ...

  10. 近百android开源项目贡献

    我从网上总结出来的,希望对android爱好者有帮助. Android PDF 阅读器 http://sourceforge.net/projects/andpdf/files/ 个人记账工具 OnM ...

最新文章

  1. Django 中ORM 的使用
  2. 边工作边刷题:70天一遍leetcode: day 11-2
  3. spring3创建RESTFul Web Service
  4. stringstream和cin
  5. 最详细的讲解 JS 原型与原型链
  6. win10 64位操作系统安装mysql_win10,64位操作系统安装mysql-8.0.16经验总结(图文详细,保证一次安装成功)...
  7. ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...
  8. 管理计算机域内置账户改为用户账户,“管理计算机(域)的内置帐户”我给它改了名...
  9. 如何玩转 WebGL 并行计算
  10. 四色着色问题 c语言编程,数据结构-图着色问题
  11. Python封装的获取文件目录的函数
  12. 如果你学习C 请不要选择DevCpp
  13. 网络图的绘制方法详细讲解
  14. C# 繁体转简体 简体转繁体
  15. 第五章:优势策略均衡
  16. Ubuntu 20.04.2 LTS 系统美化 (UOS主题)
  17. 捣鼓PlantUML(一、环境)
  18. 康威定律,作为架构师还不会灵活运用?
  19. 前端CSS核心部分盒子模型
  20. 大数据和java就业前景_Java大数据应用领域及就业方向

热门文章

  1. HTML +CSS 制作个人简历
  2. html读写txt文件,JS读写文本文件示例代码
  3. 2020五一建模评测体验
  4. c语言中开方,C++_详细解析C语言中的开方实现,关于C语言中的开方计算,首先 - phpStudy...
  5. 【蓝牙】 HCI log分析工具----Frontline ComProbe Protocol Analysis System使用教程
  6. Visual C++ 微软常用运行库合集
  7. xp系统打印服务器自动关闭,XP系统服务管理Print spooler自动关闭的解决办法
  8. 双网口工业路由器 网络传输层的“常青树”
  9. 想了解能源互联网?看这篇就够了
  10. 普林斯顿微积分读本篇三:极限导论