邢 邗 孙连英 石晓达 葛 娜
1(北京联合大学信息学院 北京 100101) 2(北京联合大学自动化学院 北京 100101)
移动学习平台的多图层管理技术研究
邢 邗1孙连英2石晓达1葛 娜1
1(北京联合大学信息学院 北京 100101)2(北京联合大学自动化学院 北京 100101)
针对在Android移动设备实现具有“多图层”管理功能的绘图软件的过程中,位图(BitMap)过度占用内存资源导致出现卡顿与尾随的现象,甚至出现OOM(Out Of Memory)错误,提出一种“三层”管理机制,不仅实现“多图层”管理功能而且确保绘图操作流畅。通过设计“画笔”类与内部数据结构,将包括坐标在内的用户绘图数据保存至XML格式的文件,达到跨平台共享数据的目的,不仅提高了互操作能力,同时改善了基于Android平台的移动学习系统性能。
Android系统 “三层”管理机制 XML文件 移动学习
随着移动应用设备性能的不断提升和价格的迅速下降[1],移动学习软件的广泛应用促使人们的学习方式发生重大改变,从传统的教科书到PC端的数字化学习(E-learning)[2],再到使用平板电脑等移动终端设备进行的移动学习(Mobile learning)[3-4]。移动学习是指在通信网络技术和无线移动通信设备的帮助下,不受时间与地点限制的学习[5-6],是一种时间零散化的学习,是一种具有个性化和情绪化的学习,在培养学生的学习兴趣、学习热情和自学能力等方面有着其他学习方式无法比拟的优点[7]。在学习过程中, 用户遇到的操作不流畅或软件崩溃会破坏其对移动学习软件的信任并减少其学习时间[8], 最终导致用户流失。所以移动学习软件的设计要体现以用户为中心满足用户功能需求和审美需求的思想[9]。移动学习软件还需要满足教师与学生、学生与学生之间双向交流的功能,要求移动学习软件拥有保存用户的学习结果数据和跨平台共享学习数据的功能。
在Strategy Analytics公布的2014年第二季度智能设备操作系统市场份额报表中,Android系统占据84.6%的份额,占据市场主导地位[10]。本文针对移动学习软件的需求,设计一款基于Android系统的移动绘画学习软件。本软件具有画笔、颜色、擦除、添加外部图片资源与文字等基本功能外,着重设计并实现“多图层”管理功能,方便用户通过图层管理绘画操作。“多图层”管理功能包括图层合并、添加与删除图层、移动缩放旋转图层和更改图层透明度等功能,用户在更改某一图层时,对其他图层无任何影响。
在Android系统中实现“多图层”功能的方法有很多,例如采用FrameLayout布局,使用多个View叠加实现“多图层”功能。创建一个View对象,在View中为每一个图层创建一个BitMap同样可以实现“多图层”功能。采用LayerDrawable对象也可以实现显示多张图片叠加的效果。当应用程序仅仅需要一个或两个图层时,占用的系统内存相对较少,不同方法之间呈现的应用效果近乎相同,同样可以满足用户的需求。但是当用户创建十几个、乃至创建几十个图层时,采用以上方法将占用大量内存资源,导致软件运行缓慢,甚至出现OOM(内存溢出)现象,用户体验将急剧下降。本文针对内存资源管理问题,提出“三层”管理机制,实现“多图层”管理功能的基础之上确保用户绘图操作流畅,并且达到绘图操作流畅程度与用户创建的图层数量无关的目的。在使用“三层”管理机制的同时,软件兼具实现使用XML文件保存用户绘画学习结果数据功能。1997年,W3C就发布了XML1.0规范[11-12],用来简化信息传输。XML语言是当今处理结构信息的有效工具,多种编程语言支持XML文件的生成与解析。本文采用XML格式文件实现保存与恢复用户的绘画学习信息,有利于实现跨平台共享用户绘画数据和用户双向交流学习结果数据的功能,有利于提高移动学习乐趣。
本文实现的移动绘画学习软件采用Android系统中Android.Graphics包提供的二维图形处理API(应用程序编程接口)实现。它包括图形处理相关的Canvas(画板)、BitMap(图像)、Paint(画笔)、Matrix(矩阵)和Point(点)类等。其中可以将Canvas理解为“画板”,BitMap理解为画板上的“图像”,一块“画板”可以拥有多张“图像”,Paint是用户绘画使用的“画笔”,Paint可以设置颜色、大小和透明度等多种属性,更改Paint属性可以达到呈现多种绘画效果的目的。在软件运行过程中,首先创建一个View视图并获取Canvas对象,通过视图View的View.touchEvent函数捕获用户的绘画操作。其次Canvas通过setBitmap方法将Bitmap与Canvas进行绑定,用户当前的绘画操作显示在绑定的Bitmap中,最后调用视图View的View.onDraw方法,动态显示绘画效果。
2.1 图层概念
在绘图软件中,“图层”的概念非常重要,许多效果可以通过“图层”的直接操作而得到。 “图层”叠加后的效果是呈现在用户视觉中的最终效果。每一个绘图操作必须对应一个操作“图层”。以移动设备的屏幕为X、Y坐标轴平面,以垂直屏幕朝向用户方向为Z轴正方向。“多图层”可以理解为多个在Z轴坐标值不同的“图层”构成,“图层”本身透明不可见,如图1所示。“图层”在Z轴坐标值越大,代表该图层越接近用户,对Z轴坐标值小于它的“图层”有遮盖效果。所有 “图层”按Z轴正方向依次叠加在一起就形成了屏幕上显示的最终效果。如果用户对其中一个“图层”做出缩放、旋转、混合效果等操作的时候,不会对其他“图层”造成任何影响。
图1 “多图层”示意图
本软件中使用PopWindow组件实现图层管理窗口。点击图层管理按钮,在弹出的图层管理窗口内,包含添加图层功能的按钮和图层列表。图层列表中每一项展示本图层内绘画操的作缩略图、图层名称、图层是否可见和更改图层顺序按钮,用户正在编辑使用的图层使用深灰色标识,如图2所示。
图2 图层管理窗口
2.2 “三层”管理设计
“多图层”管理功能包括新建图层、删除图层和图层功能三类,图层功能包括图层合并、更改图层顺序、清空图层内容、复制图层和更改图层透明度等。长按图层列表,弹出对应的图层功能窗口,如图3所示。用户在更改当前图层时,对其他图层无任何影响。
图3 图层功能窗口
如果使用一个BitMap显示所有绘画操作,在更改图层属性时会对其他图层造成影响,违背“多图层”管理功能的需求。如果为每一个图层建立一个BitMap,需要占用大量的内存。通过实验发现,当创建四个或四个以上的BitMap并显示在屏幕上时,用户在绘画过程中出现尾随和卡顿的现象。“尾随”是指软件呈现绘画效果与用户手势移动存在一定时间延迟,如图4所示。“卡顿”是指软件呈现绘画效果不够流畅。需要显示的BitMap数量越多,占用内存越多,尾随和卡顿的现象越明显,直至出现内存溢出的错误,导致程序崩溃。
图4 “尾随”现象示意图
“三层”管理机制将用户绘画操作绘制在三个BitMap中以实现“多图层”效果,完全避免因“多图层”功能需求创建BitMap导致的内存过度占用问题,支持用户创建无限多“图层”,并且用户绘图操作流畅。无论用户创建多少个图层,系统内部共需建立三个BitMap,分别命名为顶层、当前操作层和底层,对应的BitMap分别命名为UpBitMap、CurrentBitMap和DownBitMap,如图5所示。Canvas可以通过setBitMap方法更改绑定操作的BitMap。
图5 “三层”管理机制示意图
“三层”管理机制是将用户当前的绘画操作绘制在当前层,顶层中绘制大于当前层图层编号的所有图层对应的绘画操作,底层绘制小于当前层图层编号的所有图层对应的绘画操作。顶层对当前层和底层有遮盖效果,当前层对底层有遮盖效果。并且在用户操作当前层时,对其它图层无任何影响。
软件在新建一个绘画项目时,默认拥有一个图层,图层编号默认等于一。用户每新建一个图层,图层编号加一。创建一个Map
“三层”管理机制中必须遵守两个原则,一是用户绘图操作的始终是当前层。二是图层编号小于当前层图层编号的绘画内容绘制在底层中,图层编号大于当前层图层编号的绘图内容绘制在顶层中。
2.3 当前操作层编辑
假设共有N个图层,当前层为n(1≤n≤N),用户期望当前层为m(1≤m≤Nm!=n)。本着用户绘画操作的始终是当前层原则,更换当前层的步骤如下:
第一步清空三个图层分别对应的BitMap,可以调用recycle函数回收三个BitMap,之后重建相同大小的三个BitMap。
第二步从tuceng对象中获取图层编号为m的List
第三步从tuceng对象中获取图层编号小于m的所有List
第四步从tuceng对象中获取图层编号大于m的所有List
在更换当前层的过程中,存在两种特殊情况。一是期望当前层m等于图层总数N,即期望当前层是所有图层中的顶层。二是期望当前层m等于1,即期望当前层是所有图层中的最底层。
当m等于图层总数N时,三个BitMap依旧全部存在,UpBitMap中没有任何绘画操作,图层编号小于m的用户绘图操作全部绘制在DownBitMap中,如图6所示。
图6 当前层为最顶层
当m等于1时,DownBitMap中没有任何绘画操作,图层编号大于1的用户绘图操作全部绘制在UpBitMap中,如图7所示。
图7 当前层为最底层
3.1 画笔类设计
在本软件中,将用户的每一个绘画操作可以看作是“画笔”(Paint)沿手势移动轨迹在“画布”(BitMap)上的一次绘画。为了能够重现用户的绘画操作,需要保存“画笔”数据和手势移动轨迹,其中主要包括以下三类数据。
(1) 手势移动轨迹
手势移动轨迹可以使用一系列二维坐标表示。Android移动设备屏幕坐标系以左上角为坐标轴原点,水平向右为X轴正方向,垂直向下为Y轴正方向。通过触屏事件Event获取用户触摸屏幕的坐标。触屏事件可以分落下(touchDown)、移动(touchMove)和抬起(touchUp)三种事件。Android系统默认获取坐标值是Float类型,为使用Point对象保存坐标值,将捕获的坐标值数据强制转换为Int类型。实例化一个List
X=(int)Event.getX();
Y=(int)Event.getY();
Point.x=X;
Point.y=Y;
List
(2) Paint参数
Android.Graphics包中Paint类提供更改画笔半径、颜色、透明度等属性方法。在画笔类中创建Paint对象和半径(size)、颜色(color)、透明度(alpha)、样式(style)、Join、Cap、Align等变量,通过Paint对象的set方法设置各类属性,更改相应属性对应的变量值,可以呈现不同绘画效果。
(3) “画笔”类型
根据绘画效果可以将“画笔”类型分为点、曲线、基本几何图形、图片和文字五类,调用的绘画方法各不相同。“画笔”类型为“点”表示在捕获的手势坐标点的位置绘画一个点,并不连接相邻的坐标点。调用Canvas.drawPoint()方法,参数包括坐标点X与Y轴坐标值和实例化的Paint对象。“画笔”类型为“曲线”是使用Android.Graphics中提供Path类连接相邻的被捕获坐标点,形成轨迹对象。连接相邻坐标点函数为Path.moveTo(x,y)和Path.quadTo(x1,y1),其中(x,y)和(x1,y1)表示相邻两个坐标点坐标值。调用Canvas.drawPath方法绘制轨迹,参数包括Path对象和实例化Paint对象。“画笔”类型为“基本几何图形”表示可以绘画包括直线、矩形、圆等基本几何图形。不同几何图形对应各自的绘画方法,例如绘画直线采用Canvas.drawLine方法,绘画矩形使用Canvas.drawRect方法,绘画圆采用Canvas.drawCircle方法。各自的参数中包括起始坐标和终点坐标,表示最终绘画几何图形的位置只与捕获的落下事件坐标点和捕获的抬起事件坐标点有关,与移动过程无关。“画笔”类型是图片时,使用Bitmap.decodeResource方法读取指定图片资源成为BitMap类型数据。调用Canvas.drawBitmap方法将图片绘画到指定坐标。“画笔”类型是文字时,获取用户动态输入的文字,调用Canvas.drawText方法,即可在指定坐标点或指定路径绘画文字。
3.2 “撤销”与“重画”功能实现
当一个绘画操作完成后,也就是用户的手势从落下到抬起后,需要将此绘画操作进行保存。创建一个List
一般情况下,用户要求绘图软件拥有“撤销”和“重画”的功能。“撤销”就是取消最后一次或最后几次的绘画操作,“重画”就是将“撤销”的操作重新绘制到相应图层中。此时需要另一个与“ALL”序列对象同样类型的序列,命名为“SOME”。将取消的最后一次或最后几次操作依次添加进入“SOME”,并从“ALL”序列中删除,代码示例为:
SOME.add(ALL.get(ALL.size()-1));
ALL.remove(ALL.size()-1);
可以设定一个“撤销”功能允许的最大撤销步骤数目为M(M≥1)。当用户绘画操作数为A(A>M)时,将第一步绘画操作直到A-M步绘画操作保存至文件并从保存绘画操作的序列“ALL”中删除,即可减少内存占用。
清空当前层对应的CurrentBitMap,将“ALL”序列中的绘画操作从第一位开始,依次绘画到CurrentBitMap中,刷新显示,即可实现“撤销”功能。当需要“重画”功能时,将“SOME”中保存的绘画操作依次绘画到CurrentBitMap中,将重画的操作添加进入“ALL”序列中,并从“SOME”中删除,即可实现“重画”功能。
在Android移动设备中使用BitMap.compress方法将BitMap保存成图片是每一个绘图软件的必备功能。用户之间共享的数据仅仅是一张图片,不具备绘画项目重新编辑功能,降低了移动学习的乐趣与效率。为实现绘画项目重新编辑的目标,解决数据共享中跨平台和兼容性的问题。本软件实现将具有“图层信息”的用户绘画操作数据保存为XML文件的功能,达到共享用户绘画操作信息的目的,提高用户数据交流和移动学习水平。保存的XML文件中标签根据“画笔”类中参数定义,例如本软件中包含图层编号标签、“画笔”标签、坐标标签和颜色标签等,保存的XML文件示意图如下所示:
在打开与其他用户的绘画数据时,根据XML文件标签顺序,依次读取相应数据并更改内存中数据值。在读取数据结束后,将读取的绘画操作依次绘制到相应Bitmap中,实现项目恢复功能,满足不同用户之间学习交流的需求。
在Android移动应用开发中,终端有限的内存与对内存不断提升的需求始终是矛盾的。移动学习软件采用“三层”管理机制,实现了绘图软件的“多图层”管理功能,确保用户绘图体验流畅。并且通过设计“画笔”类保存用户绘画操作数据,实现“撤销”与“重画”功能。在文件保存和用户交流中,利用多平台支持XML文件生成与解析的特点,实现项目恢复与跨平台用户交流绘画数据的功能。与仅将用户绘画数据保存为图片的功能相对比,无疑提高了编辑绘画项目的效率和灵活性,增强了移动学习系统的性能。
[1] 潘志庚,何高奇,杨柏林,等.移动设备图形技术的研究进展[J].计算机辅助设计与图形学学报,2008,20(3):273-280.
[2] 冯瑶,冯锡炜.基于本体的教育资源推理查询原型系统设计与实现[J].计算机应用与软件,2016,33(10):14-18.
[3] 李向东,杨昕.基于Android平台的移动学习系统的设计与实现[J].计算机时代,2014(4):24-26.
[4] 刘帅,李建伟,勾学荣.互动式移动学习系统的设计与开发[J].北京邮电大学学报(社会科学版),2014,16(6):111-116.
[5] 赵丞兵.基于Android平台的移动学习系统设计与实现[D].北京邮电大学,2012.
[6] 孟祥武,史艳翠,王立才,等.用户对移动网络服务偏好学习技术综述[J].通信学报,2013(2):147-155.
[7] 陈锦昌,刘菲,陈煌,等.基于工程制图课程投影知识的移动学习游戏设计[J].东华大学学报(自然科学版),2016(4):608-616.
[8] 刘建设,李青,刘金梅.移动学习研究现状综述[J].电化教育研究,2007(7):21-25.
[9] 罗仕鉴,龚蓉蓉,朱上上.面向用户体验的手持移动设备软件界面设计[J].计算机辅助设计与图形学学报,2010,22(6):1033-1041.
[10] 杨红丽,姜皓,秦胜潮,等.Android应用能耗漏洞分析技术综述[J].计算机应用与软件,2016,33(9):1-6.
[11] 郑黎晓,王成.XML模式推断研究综述[J].电子学报,2016,44(2):461-467.
[12] Zhao H,Chen M,Qiu M,et al.A novel pre-cache schema for high performance Android system[J].Future Generation Computer Systems,2016,56(C):766-772.
RESEARCHONMULTI-LAYERMANAGEMENTTECHNOLOGYOFMOBILELEARNINGPLATFORM
Xing Han1Sun Lianying2Shi Xiaoda1Ge Na1
1(CollegeofInformationInstitute,BeijingUnionUniversity,Beijing100101,China)2(CollegeofAutomation,BeijingUnionUniversity,Beijing100101,China)
During the process of implementing drawing software with “multi-layer” management on Android mobile devices, BitMap over-occupied memory resources results in caton and trailing phenomena, and even OOM (Out Of Memory) errors. Therefore, we presented a kind of “tri-layer” management mechanism that not only to achieve the “multi-layer” management function, but also ensured the smooth operation of drawing operation. We designed the “brush” class and the internal data structure, including the coordinates of the user to save the data to the XML format file, so as to achieve the purpose of sharing data across platforms. Our approach can not only improves the interoperability, but also improves the performance of a mobile learning system based on Android platform.
Android system Tri-layers management mechanism XML file Mobile learning
2016-11-26。国家重点研发计划项目(2016YFC0802107)。邢邗,硕士生,主研领域:移动终端应用,图形设计。孙连英,教授。石晓达,硕士生。葛娜,硕士生。
TP311.52
A
10.3969/j.issn.1000-386x.2017.08.018