Android 开源可缩放平移的绘画板
ScaleSketchPadDemo
此项目包含两个模块
- app1 为普通绘画板
- app2 为可所发的绘画板
方便各位Android 开发者理解和使用
用法:
进入项目根目录:https://github.com/ShaunSheep/ScaleSketchPadDemo
clone or download 项目到本地,
打开Android Studio—>file—>new—>import new moudle—>选中本地的app或aap2
项目简介
| 普通绘画板 | 可缩放平移绘画板 | |
|---|---|---|
| 效果图 | ![]() |
![]() |
| 事件图 | ![]() |
![]() |
| uml图 | ![]() |
![]() |
普通绘画板
有五大功能:
- 普通绘画
- 在图片上绘画
- 改变画笔颜色
- 改变画笔粗细
- 撤销操作
- 添加图片
绘画功能

在图片上绘画

改变画笔颜色

改变画笔粗细

添加图片

绘画板原理:
注意: 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 是实际具有绘画能力的类:
- 存储点的状态(橡皮、普通点、粗细、颜色)
- 接收Canvas进行绘制
PathView 是PointPath的控制类,继承自View:
- 接收Touch事件,并处理响应的event
- 存储每一条Path
- onDraw()中调用PointPath类进行绘制
难点
- View 的 onTouchEvent()
- 每接收到一个Event,都需要break结束判断
- 存储Point的时机——>Action_Move——>记得break结束判断流程
- 存储Path的时机——>Action_Up——>记得break结束判断流程
- move和up结束前,都要invalidte
- 橡皮擦功能
- Paint.setXformode()属性,本质就是同一个位置,两个点进行集合运算
- 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
插入图片:缩放图原理

基本知识
- view 的缩放属性,平移属性
view.setscaleX()
view.setscaleY()
view.setX()
view.setY() - viewgroup和子view的事件传递
return true 即为消耗event

难点
- 计算缩放比例、控制缩放的大小,保证图片不越界
- 画板缩放之后,手势画出的线条发生偏移,计算平移值,对坐标点进行加减运算即可
- 子view和viewgroup的事件拦截
Android 开源可缩放平移的绘画板的更多相关文章
- Android实现支持缩放平移图片
本文主要用到了以下知识点 Matrix GestureDetector 能够捕捉到长按.双击 ScaleGestureDetector 用于检测缩放的手势 自由的缩放 需求:当图片加载时,将图片在屏幕 ...
- Android绘画板(普通绘画模式和缩放平移绘画模式)
ScaleSketchPadDemo 项目地址: demo apk体验下载 demo2 apk体验下载 用法: 进入项目根目录:https://github.com/ShaunSheep/ScaleS ...
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...
- 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)
标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...
- Android开源项目分类汇总
目前包括: Android开源项目第一篇——个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...
- 59.Android开源项目及库 (转)
转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- GitHub上史上最全的Android开源项目分类汇总
今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...
- Android 开源项目分类汇总(转)
Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...
随机推荐
- 常见MD5加密解密值及免费解密网站
常用的MD5解密 MD5(admin,16) = 7a57a5a743 MD5(admin,16) = 7a57a5a743894a0e MD5(admin888,16) = 469e ...
- 关于EF 通用增删改查的封装
1. Entity Framework是Microsoft的ORM框架,随着 Entity Framework 不断的完善强化已经到达了EF 6.0+ 还是非常的完善的,目前使用的比例相对于其他OR ...
- 标准IO: 文件的打开与关闭函数 fopen & fclose
(1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流&quo ...
- Python-WXPY实现微信监控报警
概述: 本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序.博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起. 博文中主要使用到的 ...
- 二维坐标点排序(JavaScript)
今天给大家分享下最近web项目中出现的一个技术难点问题--坐标排序: 如下图所示,要求在前端页面上按顺序将下面5个模块的坐标依次保存至数据库 现在已知信息如下: 1.每个模块分别为一个div 2.每个 ...
- 设计模式的征途—14.职责链(Chain of Responsibility)模式
相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断.一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新 ...
- bzoj2038: [2009国家集训队]小Z的袜子(hose) [莫队]
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- Hybris商品图片导入与压缩有关的配置
1. 在电脑上安装 ImageMagick 软件(windows平台还需要安装VC++),下载路径:http://www.imagemagick.org/script/download.php#w ...
- (转)盒子概念和DiV布局
CSS盒子和DIV布局 (2013-11-24 16:17:29) 转载▼ 一.认识div层 1.<DIV>标记是一个区块容器标记,在标记之间可以放置其他一些HTML元素,例如p,h1,t ...
- (转)Java线程:线程的同步与锁
Java线程:线程的同步与锁 一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Fo ...