ScaleSketchPadDemo

此项目包含两个模块

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

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

用法:

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

clone or download 项目到本地,

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

项目简介

    普通绘画板 可缩放平移绘画板
效果图
事件图
uml图

普通绘画板

有五大功能:

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

绘画功能

在图片上绘画

改变画笔颜色

改变画笔粗细

添加图片

绘画板原理:

注意: Pathview 没有绘制的能力,具备绘制能力的是PointPath

这张图说明了:事件传递的过程、处理事件的方式

基本知识:

View具有onTouchEvent(Motionevent event)函数,可以接收触摸事件

图,描述用户一次触摸滑动的过程,系统产生event的情况;打印log,画图无穷小的点

一次 touch event log:

 action test: finger down
 action test: finger move
 action test: finger move
 action test: finger move
 action test: finger move
 action test: finger move
 action test: finger move
 action test: finger move
 action test: finger up

实现思路

PointPath 是实际具有绘画能力的类:

  1. 存储点的状态(橡皮、普通点、粗细、颜色)
  2. 接收Canvas进行绘制

PathView 是PointPath的控制类,继承自View:

  1. 接收Touch事件,并处理响应的event
  2. 存储每一条Path
  3. onDraw()中调用PointPath类进行绘制

难点

  1. View 的 onTouchEvent()

    1. 每接收到一个Event,都需要break结束判断
    2. 存储Point的时机——>Action_Move——>记得break结束判断流程
    3. 存储Path的时机——>Action_Up——>记得break结束判断流程
    4. move和up结束前,都要invalidte
  2. 橡皮擦功能
    1. Paint.setXformode()属性,本质就是同一个位置,两个点进行集合运算
    2. onDraw()中需要新建临时canvas,临时Bitmap

可缩放的绘画板

app2 增加了缩放功能

双手缩放平移VS普通状态

缩放、平移原理

缩放功能设计

双手触摸屏幕缩放、平移操作,打印出的log(也就是系统反馈给开发者的触摸事件):

 action test: finger down
 action test: action_pointer_down
 action test: action_move
 action test: action_move
 action test: action_move
 action test: action_move
 action test: action_move
 action test: action_move
 action test: action_up

插入图片:缩放图原理

基本知识

  1. view 的缩放属性,平移属性

    view.setscaleX()

    view.setscaleY()

    view.setX()

    view.setY()
  2. viewgroup和子view的事件传递

return true 即为消耗event

难点

  1. 计算缩放比例、控制缩放的大小,保证图片不越界
  2. 画板缩放之后,手势画出的线条发生偏移,计算平移值,对坐标点进行加减运算即可
  3. 子view和viewgroup的事件拦截

Android 开源可缩放平移的绘画板的更多相关文章

  1. Android实现支持缩放平移图片

    本文主要用到了以下知识点 Matrix GestureDetector 能够捕捉到长按.双击 ScaleGestureDetector 用于检测缩放的手势 自由的缩放 需求:当图片加载时,将图片在屏幕 ...

  2. Android绘画板(普通绘画模式和缩放平移绘画模式)

    ScaleSketchPadDemo 项目地址: demo apk体验下载 demo2 apk体验下载 用法: 进入项目根目录:https://github.com/ShaunSheep/ScaleS ...

  3. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...

  4. 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)

    标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...

  5. Android开源项目分类汇总

    目前包括: Android开源项目第一篇——个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...

  6. 59.Android开源项目及库 (转)

    转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...

  7. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  8. GitHub上史上最全的Android开源项目分类汇总

    今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...

  9. Android 开源项目分类汇总(转)

    Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...

随机推荐

  1. JS内置对象学习总结

    日期对象: 创建日期对象: var date=new Date();//创建日期对象 设置/返回年份方法: date.getFullYear(); date.setFullYear(); 返回星期的方 ...

  2. python selenium自动化之-环境搭建

    安装python和pip上述文章有介绍,在这里不在赘述.直接安装seleinum pip3 install selenium 安装完成以后, pip3 show selenium 显示 Name: s ...

  3. C# Web.config配置

    使用 <!--M002 バッチを起動のPath配置--> <add key="BM0002_START_PATH" value="D:\BM0002\B ...

  4. 钉钉 机器人接入 自定义webhook

    钉钉出了个webhook机器人接入,自定义的机器人支持随时post消息到群里: 昨天就尝试着用C#写了个: 一开始用python写,但是莫名的提示  {"errmsg":" ...

  5. 解决IE8下不支持document.getElementsByClassName的方法

    在代码前面加如下代码: if (!document.getElementsByClassName) { document.getElementsByClassName = function (clas ...

  6. Linux基础(八)

    一.shell shell一般代表两个层面的意思,一个是命令解释器,比如BASH,另外一个就是shell脚本.Python也是一种解释语言. 1.   Linux中命令是按照下面的优先级执行的 ==& ...

  7. luogu P1361 小猫爬山 [iddfs]

    题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...

  8. 百度地图api将可视区域定位到当前所在位置

    1.前言 开头不说点什么,总是有点不习惯.还是说点什么吧,关于百度地图,我用的次数还是比较多的,没办法,需求呀.好吧,在用百度地图的时候,确实有过很多需求,不过好在百度地图很强大,每次需求在探索后都能 ...

  9. C++ 之 Asio 库

    1  简介  Asio 是一个跨平台的 C++ 库,常用于网络编程.底层的 I/O 编程等 (low-level I/O),其结构框架如下: 2  使用 Asio 2.1  下载  Asio 可分为 ...

  10. 【前端】react and redux教程学习实践,浅显易懂的实践学习方法。

    前言 前几天,我在博文[前端]一步一步使用webpack+react+scss脚手架重构项目 中搭建了一个react开发环境.然而在实际的开发过程中,或者是在对源码的理解中,感受到react中用的最多 ...