Android 开源绘画板项目 (ScaleSketchPadDemo)

#Android绘画板SketchPad工具

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

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

ScaleSketchPadDemo详细介绍

此项目包含两个模块

  1. app1 为普通绘画板
  2. app2 为可所发的绘画板

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

普通绘画板

有五大功能:

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

绘画功能

draw path

在图片上绘画

改变画笔颜色

改变画笔粗细

添加图片

draw path

可缩放的绘画板

app2 增加了缩放功能

双手缩放平移VS普通状态

draw path draw path

#如何实现?

技术点:

  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)进行画线操作
  1. 加入缩放效果后的难点:

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

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

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

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

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

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

  5. 写本项目的兴趣,来源于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

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值