android 绘画开源,Android 开源可缩放平移的绘画板

ScaleSketchPadDemo

此项目包含两个模块

app1 为普通绘画板

app2 为可所发的绘画板

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

用法:

clone or download 项目到本地,

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

项目简介

普通绘画板

可缩放平移绘画板

效果图

f1332ee2e165aad909bbe775dc7a9df9.png

95f8082c286c78d29353a9609fd4e5d1.png

事件图

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy9wYXRjaHZpZXdkb2NfY2hpLnBuZw==.jpg

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy9zY2FsZWRvYy5wbmc=.jpg

uml图

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy91bWwucG5n.jpg

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy9zYWNsZXVtbC5wbmc=.jpg

普通绘画板

有五大功能:

普通绘画

在图片上绘画

改变画笔颜色

改变画笔粗细

撤销操作

添加图片

绘画功能

ae808e75d857036082e572c83348a6cc.png

在图片上绘画

f1332ee2e165aad909bbe775dc7a9df9.png

改变画笔颜色

b7e000a5d76317960dfdc15aedab74d0.png

改变画笔粗细

6df1620cdfadbedb75aaa8280a52de2d.png

添加图片

aee478c4a107df23ab099d679d38beb6.png

绘画板原理:

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

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

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy9wYXRjaHZpZXdkb2NfY2hpLnBuZw==.jpg

基本知识:

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

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

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy9kcmF3cGF0aF9tZWl0dV8xLmpwZw==.jpg

一次 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

实现思路

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy91bWwucG5n.jpg

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普通状态

95f8082c286c78d29353a9609fd4e5d1.png

985bf58f4c43a999a9b9784fab935c43.png

缩放、平移原理

缩放功能设计

双手触摸屏幕缩放、平移操作,打印出的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

插入图片:缩放图原理

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy9zY2FsZWRvYy5wbmc=.jpg

基本知识

view 的缩放属性,平移属性

view.setscaleX()

view.setscaleY()

view.setX()

view.setY()

viewgroup和子view的事件传递

return true 即为消耗event

L3Byb3h5L2h0dHBzL2dpdGh1Yi5jb20vU2hhdW5TaGVlcC9TY2FsZVNrZXRjaFBhZERlbW8vYmxvYi9tYXN0ZXIvZG9jcy9zYWNsZXVtbC5wbmc=.jpg

难点

计算缩放比例、控制缩放的大小,保证图片不越界

画板缩放之后,手势画出的线条发生偏移,计算平移值,对坐标点进行加减运算即可

子view和viewgroup的事件拦截

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 ...

随机推荐

iOS:GCD理解1(同步-异步、串行-并行)

1.并行-异步(ST1与ST2抢占资源) 1-1).获取 并行(全局)队列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 为默认优先级. dispatch_queue_t queu ...

transactionManager 以及datasource type解析

transactionManager 在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”): JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设 ...

JQuery下focus()无法自动获取焦点的处理方法 jquery如何使文本框获得焦点

今天遇见这么一个小小的问题,就是文本框中需要输入内容才可以提交,如果没有输入就提示并使该文本框获得焦点! 这么一个简单的事情如果没有使用 jQuery的话 是不是对象.focus()就可以了, Jav ...

我如何调优SQL Server查询

我是个懒人,我只想干尽可能少的活.当我干活的时候我不想太多.是,你没看错,这看起来很糟糕,作为一个DBA这很不合格.但在今天的文章里,我想给你展示下,当你想对特定查询创建索引设计时,你如何把你的工作和 ...

POJ2001Shortest Prefixes(字典树)

题目大意就是帮你给N条字符串,每条长度不超过20.问要将他们单一识别出来,每个字符串最短可以缩为多短. 如: abc abcdefg bc adef 这四个字符串就可分别缩写为 abc abcd b ...

Qt5:不规则按钮的实现---通过贴图实现

在应用开发中,有时候为了美观会在UI界面中增加不规则的按钮 现在我们就来看看Qt中是怎么实现不规则按钮的 /// ...

网页html结构搭建方法总结

在div+css布局中,一般都这样来整体构架的:

移动开发必须要弄明白的问题】详解Eclipse转Android Studio

2015-12-09 13:01:244264浏览3评论 AS出来一年多了,最近才从Eclipse转到AS,但我并不觉得使用Eclipse有多落后,它们都只是一个工具而已,哪个顺手就用哪个,用得好都能 ...

jquery中this和event.target的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值