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. Oracle两张表关联批量更新其中一张表的数据

    Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...

  2. requirejs 加载其它js

    基本代码: require.config({ // baseUrl : '/js/' paths: { jquery: '/js/jquery-1.11.3.min', validate: '/js/ ...

  3. 关于position:fixed;的居中问题

    通常情况下,我们通过操作margin来控制元素居中,代码如下: #name{ maigin:0px auto; } 但当我们把position设置为fixed时,例如: #id{ position:f ...

  4. 干货~powershell与bash和docker在项目中怎么用

    回到目录 这个标题够直接了吧,够坦诚了吧,也许你在项目里这三个东西都没有用到,但这三个东西在未来的两年里将成为最HOT的技术,它们不是什么框架,也不是什么设计模式,而是做为程序和环境快速部署而设计出来 ...

  5. JQuery学习笔记——层级选择器

    JQuery学习笔记--层级选择器 上一篇学习了基础的五种选择,分别是id选择器,class选择器,element选择器,*选择器 和 并列选择器.根据手册大纲,这篇学习的是层级选择器. 选择器: 1 ...

  6. FreeRTOS——队列管理

    1. 队列主要用于任务与任务.中断与任务之间的消息传递. 2. 创建队列时,请注意队列中数据单元的长度. 3. 通常情况,队列被作为FIFO(先进先出)使用,即数据从队列尾写入,从队列首读.当然,数据 ...

  7. UVALive - 5107 - A hard Aoshu Problem

    题目链接:https://vjudge.net/problem/UVALive-5107 题目大意:用ABCDE代表不同的数字,给出形如ABBDE___ABCCC = BDBDE的东西: 空格里面可以 ...

  8. TypeScript02 方法特性【参数种类、参数个数】、generate方法、析构表达式、箭头表达式、循环

    1 方法的参数 1.1 必选参数 调用方法时实参的个数必须和定义方法时形参在数量和类型上匹配 /** * Created by Administrator on 2017/8/2 0002. */ f ...

  9. SSE再学习:灵活运用SIMD指令6倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由180ms降低到30ms)。

    这半年多时间,基本都在折腾一些基本的优化,有很多都是十几年前的技术了,从随大流的角度来考虑,研究这些东西在很多人看来是浪费时间了,即不能赚钱,也对工作能力提升无啥帮助.可我觉得人类所谓的幸福,可以分为 ...

  10. 2017-6-4 CTF解题报告

    1.签到题 附件 扫描二维码得到 ZCTF{WELCOME_TO_20-209} 2.阿斯克的秘密 从前有个叫做阿斯克的人,他写了一句话,聪明的你能明白他写的是什么吗? 附件 int a; while ...