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. 新篇章之我的java学习之路上

    现在我怀着激动和兴奋的心情来写我的第一篇博客,谈谈我自己的学习java的这段历程. 我大学学的软件工程专业,学校开设过c++,数据结构,java,Android等等这类的关于开发的相关课程,但是在学校 ...

  2. blob 和 sas

    Blob是什么? 请看上篇文章简单总结下关于blob的图片上传 在使用Blob图片上传的时候碰到许多问题,比如如何使用用户名密码下载文件啊什么的 今天就记录一下我碰到的最大的问题 如何匿名去访问你上传 ...

  3. Android - 读取JSON文件数据

    Android读取JSON文件数据 JSON - JavaScript Object Notation 是一种存储和交换文本信息的语法. JSON对象在花括号中书写.用逗号来分隔值. JSON数组在方 ...

  4. FreeRTOS——资源管理

    1. 多任务系统存在一个潜在的风险:资源管理. 2. 基本临界区:taskENTER_CRITICAL() 与 taskEXIT_CRITICAL() 或 taskENTER_CRITICAL_FRO ...

  5. xdu_1009: Josephus环的复仇(线段树)

    题目链接 题意不难理解,解法具体看代码及注释吧.. #include<bits/stdc++.h> using namespace std; typedef long long LL; ; ...

  6. nopCommerce 3.9 大波浪系列 之 开发支持多店的插件

    一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. (点击接口介 ...

  7. 准备 overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49)

    为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络.VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 ...

  8. CVTE后台开发实习生岗位面试经验(2017.3)

    3月份我在看准网发布过这篇面经,现在转过来.原文链接:http://www.kanzhun.com/gsmsh10433357.html 投递岗位是web后台实习生 做完笔试后一天对方即发来面试通知 ...

  9. Windows10系统PHP开发环境配置

    Windows下搭建(Apache+PHP+MySQL)=>WAMP Linux下搭建(Apache+PHP+MySQL) =>LAMP PHP开发环境配置一般有套件安装和自定义安装两种方 ...

  10. 再起航,我的学习笔记之JavaScript设计模式04

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上回 ...