Android平台电子电路实验教学应用的开发
2016-05-17中国传媒大学骆新全
中国传媒大学 喻 进 骆新全
Android平台电子电路实验教学应用的开发
中国传媒大学 喻 进 骆新全
【摘要】为了使学生及时掌握电子电路实验的操作,提出了Android平台的电子电路实验教学应用。该应用借助Android中绘图、触控的应用程序接口,设计了移动终端上的电子电路技术实验练习模块,提高了教学辅助系统的交互体验,突显出这种移动终端应用所具有的可用性和有效性。
【关键词】电子电路;Android;实验教学
1 概述与现状
电子电路实验课是通信电子类专业教学内容的重要组成部分。通过在实验室操作真实仪器和电路,学生完成各种类型的实验任务。基于传统台式机的教学辅助系统可供学生完成各类电子电路的实验练习,表达输出测试结果。然而随着个人移动终端的普及,受到体积的限制,传统的教学辅助系统无法满足移动场景下的需求。
当前在Android应用市场上相对成熟的应用有Circuit Jam和EveryCricuit。Circuit Jam将若干电路由易到难排列,用户需要操作电路图来配合当前显示的波形,过程中电路复杂度不断增长,用户也会对电路有更深刻的了解。EveryCricuit则允许用户查看经典的电路图,并可创建自己的电路,观看动态的电流、电压动画,这为用户深入认识电路及其工作方式提供了很强的灵活性。
国外成熟的电子电路实验应用,为设计开发适合国内教学特点的应用提供了有益的参考。针对以上分析,本文提出了Android平台的电子电路实验教学应用,以此作为传统教学辅助系统的补充,能使学生在课下随时随地复习和掌握有关电子电路的相关技能,从而提高电子电路实验的教学效果。
2 应用总体设计
图2-1 应用结构示意
2.1设计思路
电子电路实验按照类别的不同,设计成LineActivity、MoveActivity和FlipActivity三种模式。应用中所设计的活动类、基类等组件的结构示意如图2-1所示。
应用所包含的活动类分别要完成三类实验模式,只要是符合某个模式的实验内容,都可以在对应活动类中完成初始化。在LineActivity中,学生根据实验要求连接电路,轻点测量表笔和电路节点,由此生成若干电路连线,且可划断某个连线;而在MoveActivity中,学生选择元件或仪器,拖拽它们到指定电路的空缺处;在MoveActivity的基础上设计的FlipActivity,允许学生旋转元件以完成电路。
结构示意图下部分的两个基类,即代表电路图层对象和节点对象,它们分别定义了电路图层对象和节点对象的坐标、宽和高、移动方法、位置方法、碰撞检测方法、是否可见方法以及绘制方法等,方便对实验界面里的电路图层和节点进行控制。
列表活动类ListActivity则负责显示实验列表并提供启动相应活动类的入口。
2.2模块流程图
结构示意图中,各活动类涉及的模块流程图如图2-2所示。
各个活动类负责处理如点按、拖拽这样的触摸事件。从模块流程图可看出,模块的核心是不断的绘图和刷新界面,而判断正误的规则写入各个实验中,提交后便可见到判定结果并显示正确答案。
图2-2 活动类设计的流程图
3 电子电路实验的实现
电子电路实验有以下几个关键问题,下面列出相应解决方案及其代码片段。
3.1LineActivity的触摸响应逻辑
LineActivity的功能是学生可以通过点击仪器的测量表笔和电路节点完成仪器和电路的连接,并且可以划断电路连线以重新连线。图3-1是触摸事件和相应判断逻辑关系的示意。
图3-1 LineActivity触摸响应逻辑示意
3.1.1连接测量表笔和节点
在Activity里定义了判断是否连线成功的方法line(),节点被判断为点击之后调用这个方法,若连线成功,则调用视图类(View)的postInvalidate()方法刷新界面,重绘时调用Canvas类的drawLine()方法绘制直线。
代码片段:
3.1.2划断电路间的连线
在节点类CircuitPoint里定义了判断触摸点是否划过电路连线坐标范围内的方法,只要在Activity的onTouchEvent()方法中获取触摸点坐标,并调用isCut()方法就能判断连线是否被切断。若被切断,则在该连线坐标范围绘制一条与画布背景颜色相同的直线。下面片段是连线为竖直方向的方法,即比较触摸点与连线的对应坐标值,水平方向与之类似。
代码片段:
3.2MoveActivity的触摸响应逻辑
MoveActivity的功能是学生可以通过拖动元件或仪器至目标框中完成选择,若未完成选择,元件或仪器自动回到原位置。图3-2是触摸事件和属性动画之间关系的示意。
图3-2 MoveActivity触摸响应逻辑示意
3.2.1对象与目标的碰撞检测
在CircuitPart里定义判断是否拖拽成功的方法crash(),该方法通过对触摸点离开屏幕时图片的位置和目标框进行坐标比较,从而判断对象是否已经在目标范围内。
代码片段:
3.2.2借助属性动画处理取消事件
用户拖拽某个对象中途要放弃而选择另一个,那么当前的对象应该回到初始位置,而直接设置界面上会有明显的闪烁,可以借助属性动画改善。属性动画可以在指定时间内改变一个对象的属性。下面的例子指定的动画属性为对象在屏幕上的横纵坐标,animator对象会计算出图片当前位置到原来位置的距离,然后执行动画便可。
代码片段:
3.3FlipActivity的触摸响应逻辑
此活动类在MoveActivity的基础上,能让学生先旋转元件,再点按元件拖动到指定位置以完成选择。对于二极管等具有方向性的元件,该活动类增强了实验的可操作性。图3-3是触摸事件和旋转动画之间关系的示意。
图3-3 FlipActivity触摸响应逻辑示意
3.3.1实现元件在触摸后旋转
在应用中,元件的实质是Bitmap类对象,可以使用矩阵类Matrix的postRotate方法对其执行旋转操作,把旋转后的Bitmap返回给自身。不过这种方法使得旋转在调用的时候已经发生,看起来会比较生硬,缺乏灵活性。
为了让旋转在特定时间内发生,自定义一个旋转动画监听器类,用以实现ValueAnimator类的监听器接口,把旋转角度、旋转轴坐标值作为参数供其计算属性值。
代码片段:
private class rotateAnimatorListener implements ValueAnimator. AnimatorUpdateListener {... public rotateAnimatorListener (Matrix matrix, int id) {...}
@Override
public void onAnimationUpdate (ValueAnimator animation) {
float degree = (Float) animation.getAnimatedValue("rotation"); ... tMatrix.postRotate(degree, pivotX, pivotY); ... } }
监听器类对象负责处理旋转事务,可以为属性动画对象指定一个该类对象,由于setRotateAnimation传入的参数中包含元件所代表的矩阵,因此可对任意指定的元件对象设置旋转动画。其后,可以为属性动画对象指定持续时间并令其触发。
3.3.2分配不同的触摸响应逻辑
在此活动类中,元件有被旋转和被拖动两种状态;被拖动如同MoveActivity分配到ACTION_MOVE事件中,而被旋转则分配到ACTION_UP,即手指在屏幕上抬起。元件被旋转的状态之所以不分配到ACTION_DOWN,主要是由于ACTION_MOVE事件起始于ACTION_DOWN,如果旋转状态分配到ACTION_DOWN,将会出现在一个手势中旋转并拖动的现象。
为解决这一冲突问题,将被旋转分配到ACTION_UP事件中,这样轻点元件并抬起只响应旋转,按住元件并移动则响应拖动。另外在ACTION_MOVE事件中,还要判断元件是否处于竖直状态,若没有,则弹出相应提示对话框。
代码片段:
if (circuitParts.get(0).isInPart(eventX, eventY)) { ...
setRotateAnimation(90, circuitParts.get(0).getX() + circuitParts. get(0).partWidth / 2,
circuitParts.get(0).getY() + circuitParts.get(0).partHeight / 2,
circuitParts.get(0).partMatrix, ); ... }
上面的代码展示了在ACTION_UP事件中,轻点二极管元件并抬起,使得二极管绕自身中心旋转了90度。
判断竖直状态的逻辑比较简单,对每个元件设置一个整型flipNum值,也就是旋转次数,初始化为零。对于各个元件,每旋转一次flipNum自增1,判断时为flipNum对2取余,也就是说,旋转次数为偶数便会弹出提示。至于拖动以分配到不同的结果时,亦是对旋转次数取余的方法来判断当前选择元件的状态。
4 运行效果与总结
4.1运行效果示意
下面是应用内包含的实验内容及其对应的活动类。
电子电路实验中,连线的实验如图4-1所示。在此划断了一根连线,并把万用表的表笔和划去后的节点连接了起来。
电子电路实验中,旋转元件并拖动来填充电路的实验如图4-2所示。在此先轻点二极管使其为竖直方向,再将它点按拖动了虚线框里,从而完成电路填充。
图4 1LineActivity实例,万用表测量电流,划断电路以连线
图4-2 FlipActivity实例,二极管基本电路,旋转元件填充电路
4.2总结与展望
本文描述了在基于Android系统的移动终端上实现电子电路实验的方法和过程,充分运用Android SDK中的组件和方法,结合电子电路实验课的实际,解决了包括绘图、触摸响应逻辑等问题。不过,本研究的实际效果还略显粗糙,在业务逻辑和技术实现上还有进一步改良的空间。
个人移动终端的繁荣为移动开发者提供了广阔的平台,而在Android平台上服务于教育教学的应用仍相对匮乏。相信随着应用市场的逐渐成熟,创新的实践方法被不断扩充,更加丰富优质的实验教学类应用将供高校师生使用。
[1]鲁学亮,陈金焘,孙秋瑞,刘臻.移动校园转型实践——基于WebApp的移动应用客户端设计与实现[J].中国教育信息化,2013,21:17-20.
[2]刘欢,卢蓓蓉,马晨辉.浅析高校校园移动应用开发[C].武汉大学学报(理学版),2012.
[3]马建平,奚亮亮.基于移动应用的校园信息服务系统[C].计算机系统应用,2012.
[4]徐宜生.Android群英传[M].北京:电子工业出版社,2015.
[5]任玉刚.Android开发艺术探索[M].北京:电子工业出版社,2015.
[6]Bill Phillips,Chris Stewart.Android Programming[M].The Big Nerd Ranch Guides,2013.
[7]Bogdan-Alexandru Deaky.Developing Android client applications for online laboratories[C].2014 IEEE Global Engineering Education Confere nce(EDUCON),2014.838-843.
[8]Tianchong Wang,Daniel Churchill.Educational application of touchpad technology in higher education in HongKong[C].2013 IEEE 63rd Annual Conference International Council for Educatioin Media(ICEM),2013.
[9]Hou Han,Dongqing Wang,Jun Xu.Classroom Assessment and Analysis System[C].2013 International Conference on Advanced Cloud and Big Data,2013.
[10]Daniel Orford,Genovefa Kefalidou.Electronic Lecturing and Teaching Aid using Collaborative Smart Phones[C].Science and Information Conference,2013.