本发明涉及笔迹显示领域,更具体地,涉及一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置。

背景技术:

智能移动设备平台上的回放技术已遍布许多安卓(Android)软件中,比如:字帖类软件,画图类软件等。在市面上,大多数软件采取的回放笔迹技术,目前比较流行的两种算法:一是历史坐标回溯法,此方法需根据事先存储字迹的历史定位坐标与回放的设定参数,从数据库中检索得到后在将轨迹再在画板上重新绘制,绘制完成代码繁琐且需要较大的内存,不符合移动设备轻应用的需求;二是通过录制屏幕生成媒体文件再重放,也有存储量大的问题。Android自带的Picture类,其使用过程需要存储记录绘图操作,需要存储的媒体文件造成无益的空间占用并且不能很好体现实时性

技术实现要素:

本发明为克服上述现有技术所述的至少一种缺陷,提供一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置。

本发明旨在至少在一定程度上解决上述技术问题。

本发明的首要目的是提供一种基于可缩放矢量图形的笔迹回放方法,解决现有技术中存储量大且代码繁琐的问题

本发明的进一步目的是提供一种基于可缩放矢量图形的笔迹回放装置。

为解决上述技术问题,本发明的技术方案如下:

一种基于可缩放矢量图形的安卓平台笔迹回放方法,包括以下步骤:

S1:识别绘制过程中产生的每一段笔划的Path;

S2:将识别的每一段笔划的Path保存至路径集合P中;

S3:利用监听器和PathMeasure类实现该字体的笔迹回放;

上述方法中以相对成本较低的方式解决难题,即使用集合存储可缩放矢量图形(SVG)格式的每笔笔划,同时结合能够直接改变属性值的动画类ValueAnimator类,通过属性动画让任何对象的属性都跟着时间的改变进行变化,同时通过PathMeasure类追踪Path的坐标进行绘制定位,最终实现书写过程回放的功能,从而有效简化了代码,避免存储过多的参数以及产生媒体文件占用过大内存,也大大减少了存储空间。

优选地,每一段笔划的Path保存为SVG文件,SVG是可伸缩矢量图形(Scalable Vector Graphics),Path类是SVG基本形状中最强大的一个,绘制过程中的笔迹均用Path类保存为SVG文件,由于SVG是一个纯粹的XML文件,占用内存小,能够大大地减少存储空间,也便于往后实现回放功能直接进行代码层面的操作。

优选地,步骤S1的识别绘制过程中产生的每一段笔划的Path,其中识别一段笔划的Path的具体步骤中用一字体集合处理模块对Path进行处理操作,具体为:

S1.1:定义L0为当前Path长度,Lt为前一Path长度,L0=Lt=0;

S1.2:定义P0为当前处理Path,绘制过程中,每生成一段Path,则把该段Path存入P0,测量一次P0的长度l,令L0=l;

S1.3:若L0大于Lt,则执行S1.4;若L0不大于Lt,执行S1.5;

S1.4:令Lt=L0,定义Lh为历史Path长度,令Tp表示操作类型,Tp∈(0,1),其中Tp=0代表替换模式,Tp=1代表添加模式;

若L0大于0,则Lh=L0,P0传入处理P0的字体集合处理模块,Tp=0;

跳过步骤S1.5;

S1.5:若L0不等于0或LH等于0,返回步骤S1.2;若L0等于0且LH不等于0,P0传入处理P0的字体集合处理模块,Tp=1;

S1.6:在字体集合处理模块中判断Tp的值:

若Tp=0,把P0与路径集合P中最后加入的Path替换;

若Tp=1,把P0加入路径集合P中。

Path类封装了由线段、二次曲线与三次曲线组成的复合(多轮廓)几何路径。它可以用Canvas类的drawPath方法进行绘制、填充,或者用于裁剪或以路径的方式绘制文本。由于在利用Canvas类实现绘制功能的绘画过程中,一段连续线条将产生多段Path,本步骤中只要迭代识别出该字的每段连续线条完整的一笔。

优选地,步骤S2的具体步骤为:

S2.1:判断路径集合P是否已创建,若未创建则线创建一个路径集合P;

S2.2:定义Ps为目标Path变量,Ls为Ps的长度,传入的Path存入Ps,并测量Ps长度ls,Ls=ls;

S2.3:若路径集合P为空,把Ps直接加入P;

若路径集合P不为空,且Tp=1则将Ps加入至P中;

若路径集合P不为空,且Tp=0则替换P中最后加入的Path;

S2.4:重复步骤S2.1至S2.3直至将所有笔划的Path存入P。

优选地,步骤S3的具体步骤为:

S3.1:遍历路径集合P,定义Pi为获取的第i个Path;

定义Si为动画状态,Si=Start,Si∈{Start,None};

定义监听器A和监听器B,其中监听器A为AnimatorListener类型的监听器,监听器B为AnimatorUpdateListener类型的监听器;

S3.2:通过监听器A改变动画状态,具体为:

重写方法onAnimationStart,设置动画状态为Start,表示动画开始的状态为Start;重写方法onAnimationEnd,设置动画状态为None,表示动画结束的状态为None;

S3.3:通过监听器B的getAnimatedValue方法获取自动更新的动画属性值m∈[0,1],当获取并更新一次动画属性值m,则:

强制当前视图绘制,若Si=Start,截取该Pi进行绘制,定义Lx为Pi的部分长度,LM为Pi的完整长度,则Lx=LM*m,多次迭代,实现回放动画效果;

若Si=None,则将完整笔划重绘并显示在画板上;

Android的AnimatorListener类可以从动画接收通知,通知指示动画的相关事件。而Android的另一个监听类——AnimatorUpdateListener类可以通过调用getAnimatedValue函数接收每个动画帧通过ValueAnimator计算的回调值。

一种基于可缩放矢量图形的安卓平台笔迹回放装置,包括:

识别模块,所述识别模块用于识别绘制过程中产生的每一段笔划的Path,所述识别模块包括字体集合处理模块;

封装模块,所述封装模块用于将识别的每一段笔划的Path保存至路径集合P中;

动画回放模块,所述动画回放模块利用监听器和PathMeasure类实现该字体的笔迹回放。

与现有技术相比,本发明技术方案的有益效果是:

本发明将笔迹用Path类保存为SVG文件,大大减少存储空间,占用内存少且便于往后实现回放功能直接进行代码层面的操作;基于属性值动画原理以及ValueAnimator类实现对笔迹的回放,只需要对只需要对动画的监听去做一些操作,在监听中将这个值设置给Path的长度属性,不断更新这个属性值便可实现动画效果。能够有效降低回放过程的计算量,简化回放代码,并且具备良好的动画效果;也不需要存储,符合实时性,能更灵活地实现实时回放书写过程。本发明能极大减少存储空间的同时,也能极大简化回放代码,提高代码易读性。

附图说明

图1为一种基于可缩放矢量图形的安卓平台笔迹回放方法的流程图;

图2为识别绘制过程中产生的每一段笔划的Path的流程图;

图3为将识别的每一段笔划的Path保存至路径集合P中的流程图;

图4为利用监听器和PathMeasure类实现该字体的笔迹回放的流程图;

图5为笔迹原图展示图;

图6为笔迹回放展示图;

图7为一种基于可缩放矢量图形的安卓平台笔迹回放装置示意图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;

对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

下面结合附图和实施例对本发明的技术方案做进一步的说明。

实施例1

本实施例提供的一种基于可缩放矢量图形的安卓平台笔迹回放方法,如图1,包括以下步骤:

S1:识别绘制过程中产生的每一段笔划的Path;

S2:将识别的每一段笔划的Path保存至路径集合P中;

S3:利用监听器和PathMeasure类实现该字体的笔迹回放;

每一段笔划的Path保存为SVG文件;

步骤S1的识别绘制过程中产生的每一段笔划的Path,其中识别一段笔划的Path的具体步骤中用一字体集合处理模块对Path进行处理操作,如图2,具体为:

S1.1:定义L0为当前Path长度,Lt为前一Path长度,L0=Lt=0;

S1.2:定义P0为当前处理Path,绘制过程中,每生成一段Path,则把该段Path存入P0,测量一次P0的长度l,令L0=l;

S1.3:若L0大于Lt,则执行S1.4;若L0不大于Lt,执行S1.5;

S1.4:令Lt=L0,定义Lh为历史Path长度,令Tp表示操作类型,Tp∈(0,1),其中Tp=0代表替换模式,Tp=1代表添加模式;

若L0大于0,则Lh=L0,P0传入处理P0的字体集合处理模块,Tp=0;

跳过步骤S1.5;

S1.5:若L0不等于0或LH等于0,返回步骤S1.2;若L0等于0且LH不等于0,P0传入处理P0的字体集合处理模块,Tp=1;

S1.6:在字体集合处理模块中判断Tp的值:

若Tp=0,把P0与路径集合P中最后加入的Path替换;

若Tp=1,把P0加入路径集合P中。

步骤S2的具体步骤如图3,具体为:

S2.1:判断路径集合P是否已创建,若未创建则线创建一个路径集合P;

S2.2:定义Ps为目标Path变量,Ls为Ps的长度,传入的Path存入Ps,并测量Ps长度ls,Ls=ls;

S2.3:若路径集合P为空,把Ps直接加入P;

若路径集合P不为空,且Tp=1则将Ps加入至P中;

若路径集合P不为空,且Tp=0则替换P中最后加入的Path;

S2.4:重复步骤S2.1至S2.3直至将所有笔划的Path存入P。

步骤S3的具体步骤如图4,具体为:

S3.1:遍历路径集合P,定义Pi为获取的第i个Path;

定义Si为动画状态,Si=Start,Si∈{Start,None};

定义监听器A和监听器B,其中监听器A为AnimatorListener类型的监听器,监听器B为AnimatorUpdateListener类型的监听器;

S3.2:通过监听器A改变动画状态,具体为:

重写方法onAnimationStart,设置动画状态为Start,表示动画开始的状态为Start;重写方法onAnimationEnd,设置动画状态为None,表示动画结束的状态为None;

S3.3:通过监听器B的getAnimatedValue方法获取自动更新的动画属性值m∈[0,1],当获取并更新一次动画属性值m,则:

强制当前视图绘制,若Si=Start,截取该Pi进行绘制,定义Lx为Pi的部分长度,LM为Pi的完整长度,则Lx=LM*m,多次迭代,实现回放动画效果;

若Si=None,则将完整笔划重绘并显示在画板上。

在具体实施过程中,如图5和图6,图5表示笔迹原图,精油本实施例提供的方法进行笔迹还原,具体过程展示如图6所示,可以很好的还原笔迹。

实施例2

本实施例提供一种基于可缩放矢量图形的安卓平台回放装置,如图7,包括:

识别模块,所述识别模块用于识别绘制过程中产生的每一段笔划的Path,所述识别模块包括字体集合处理模块;

封装模块,所述封装模块用于将识别的每一段笔划的Path保存至路径集合P中;

动画回放模块,所述动画回放模块利用监听器和PathMeasure类实现该字体的笔迹回放。

相同或相似的标号对应相同或相似的部件;

附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

android 绘画笔迹回放_一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置与流程...相关推荐

  1. python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程

    本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...

  2. 充电枪cp信号控制板_一种电动汽车交流充电系统的CP信号电压检测方法及装置与流程...

    本发明涉及电动汽车充电 技术领域: ,具体提供一种电动汽车交流充电系统的cp信号电压检测方法及装置. 背景技术: :电动汽车充电技术分为直流充电和交流充电.交流充电桩在体积.成本和安装条件上相比直流充 ...

  3. python基于什么语言-一种基于Python语言的EDA开发平台及其使用方法与流程

    本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...

  4. java头像交互式差分演变_一种基于交互式差分进化计算的用户知识需求获取方法与流程...

    本发明属于知识服务领域,具体涉及一种基于交互式差分进化计算的用户知识需求获取方法. 背景技术: 在多数企业拥有庞大的知识数量和优质的知识资源的情况下,如何利用推送系统将知识主动推送给设计人员以提高企业 ...

  5. ft232h引脚_一种基于芯片ft232h的usb接口电路的制作方法

    一种基于芯片ft232h的usb接口电路的制作方法 [技术领域] [0001 ] 本实用新型涉及一种USB接口电路,具体涉及一种基于芯片FT232H的USB接口电路. [背景技术] [0002]USB ...

  6. java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程

    本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...

  7. 语音识别维特比解码_一种基于维特比算法的花洒语音识别系统及方法与流程

    本发明涉及语音识别技术领域,具体涉及一种基于维特比算法的花洒语音识别系统及方法. 背景技术: 随着生活水平的提高和住房条件的改善,很多家庭都安装了沐浴设施,花洒是其中最常见的淋浴装置.目前花洒产品多为 ...

  8. bim 模型web页面展示_一种基于BIM模型的Web端轻量化展示方法与流程

    本发明涉及基坑结构模型技术领域,尤其涉及一种基于bim模型的web端轻量化展示方法. 背景技术: 建筑信息模型(buildinginformationmodeling,bim)技术在土木工程领域快速推 ...

  9. 手机室内地磁定位软件_一种基于地磁辅助WiFi的智能手机用户室内定位方法

    一种基于地磁辅助WiFi的智能手机用户室内定位方法 [专利摘要]本发明涉及一种基于地磁辅助WiFi的智能手机用户室内定位方法,包括离线阶段和在线阶段,离线数据采集阶段包括:根据建筑物平面地图把待定位区 ...

最新文章

  1. 暑期集训3:几何基础 练习题G: HDU - 1052
  2. 八大排序算法合集 (归并排序、交换排序、插入排序、选择排序......)
  3. 高通创投在中国区的投资重点,目前主要聚焦在AI+5G、XR+5G、机器人/自动驾驶+5G、物联网+5G四个方面。
  4. Vitamio打造自己的Android万能播放器
  5. effective c++ 学习
  6. 清华大学计算机系71班张晨,“神仙打架”要来了!网友:又到了凡人围观的时刻...
  7. Zigbee在.Net Micro Framework系统中的应用
  8. 文本模式下的分辨率对照表
  9. Android数据库存放的具体位置
  10. Javascript实现重力弹跳拖拽运动效果
  11. C++ STL容器vector篇(二) vector容器的构造函数与赋值操作
  12. cocos之观察者模式应用实例
  13. 解决wireshark打开错误
  14. 深入理解jvm虚拟机(面试复习)
  15. 企业管理系统可视化权限功能设计
  16. quartus13.0用原理图输入法设计8位全加器
  17. linux 脚本 pause,Linux Shell脚本pause命令
  18. pandas学习之df.sample
  19. C语言编程>第二十二周 ② 请补充fun函数,该函数的功能是:返回字符数组中指定字符的个数,指定字符从键盘输入。
  20. 对宇宙起源的一个现代猜想-重生而非诞生

热门文章

  1. Java初学者轻便易于上手的小项目(2020最新)
  2. Python-python程序打包为独立的EXE文件,并配上自定义的图标
  3. centos查看安装oracle客户端,CentOS 6.4 安装oracle客户端
  4. golang并发编程-04-通道-02-定时器、断续器
  5. matlab求解多自由度振动系统,【2017年整理】1-《机械振动基础》大作业,基于matlab的多自由度振动.doc...
  6. 关于环境依赖问题的反思NO.1
  7. 如何提升会议体验感和氛围感?
  8. matlab矩阵学习—郭彦甫老师笔记
  9. 计算机网络双语常用词汇,计算机网络协议词汇Protocols
  10. 52-20210322华为海思Hi3516DV300的linux系统编译(eMMC模式)1