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 ...
随机推荐
- Bash : 索引数组
Bash 提供了两种类型的数组,分别是索引数组(indexed array)和关联数组(associative array).本文主要介绍索引数组的基本用法. 索引数组的基本特点 Bash 提供的数组 ...
- C语言代码训练(一)
今天我们先来讲解一道C语言的经典例题,也是从零开始系列中的一道课后练习题. 请用控制台程序绘制如下图案. 循环经典例题 分析情况 这个题目是要求打印30行"*",每行打印的个数不同 ...
- vue使用中的随笔
在vue中vue-router配置的路径默认有"#"号,虽然无伤大雅,但是很多客户都不想看到,所以在初始配置路由的时候加上下面一句代码就可以了 mode:'history', 路径 ...
- FFT_ad采样速率
调用quartus的ip核测量频率和幅值,可以把程序分成四大部分.第一部分是AD采样模块,本次实验用的是ad828,最高采样率为70M, 根据奈贵斯特采样定律 Fs > 2Fc,即采样率要大于信 ...
- NlpirParser智能挖掘平台词性标注新算法
词性标注是自然语言浅层理解的一个重要环节,它可帮助系统自动判定词语所属的语法范畴,为进一步处理提供更高层面的支持.词性标注主要任务是消除词性兼类歧义,对于新信息检测来说,它的实际意义还在于: (1)能 ...
- iOS多款源码分享
iOS精选源码 列表联动,Linkage 电商商品详情 AxcUIKit-控件整合框架,快速简单的使用高级控件 GKNavigationBarViewController-导航栏联动 仿京东的加入购物 ...
- Python用Pillow(PIL)进行简单的图像操作
Python用Pillow(PIL)进行简单的图像操作 颜色与RGBA值 计算机通常将图像表示为RGB值,或者再加上alpha值(通透度,透明度),称为RGBA值.在Pillow中,RGBA的值表示为 ...
- Python爬虫初学(三)—— 模拟登录知乎
模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...
- 解决oracle数据库删除sql语句出现^H字样
1:安装readline包 yum install readline* 2:安装源码包: rlwrap-0.30.tar.gz ./configure && make & ...
- 庖丁解牛——CY7C68013A开发框架
大家好,好久不见了,距离上次发文章都有两个多星期了,非常高兴同时也非常感谢你们能一直关注我.之前在公众号上收到网友的消息,其大概意思就是问我能不能出点USB干货,为此我就把第二篇--解密USB2.0数 ...