摘 要: 设计了一款基于Android的翻转式课堂教学系统,系统包括四个主要模块:微课学习、课堂互动、错题本、学情分析。客户端用到了多线程交互、afinal加载图片以及gson解析数据等主要技术;服务端运用了MVC模式,通过Dao类来控制数据的访问。软件适用于Android平板,可以广泛应用于各大中小学的课堂教学中。使学生有更多的自主学习时间,提高学生学习乐趣;老师可以系统、直观地记录每位学生的学习情况和自己教学情况。
0 引言
当今社会极高的网络覆盖率和智能设备的使用率必定会影响到现在的教育模式,因此翻转课堂这种新兴的教育类型就应运而生。在翻转课堂中,学生可以通过互联网使用优质的教育资源,不再是单单地从课堂上获取知识。老师的角色也发生了变化,其责任则是从主导学生的学习转变为引导学生的学习[1-2]。
国外很早就尝试了这种翻转式的课堂教学,起源可以追溯到20世纪90年代初美国哈佛大学物理学教授埃里克·马祖尔创立的“同伴教学法”[3],其本质就是要求学生课下自学课程内容,课上则是以“提问-思考-回答”的互动方式为主进行教学。翻转课堂在今后会成为一种教育趋势。
本文介绍了如何开发基于Android的翻转式课堂教学APP软件。该软件服务器端使用Java开发,灵活运用了MVC模式[4-5](模型Model、视图View、控制器Controller),如图1所示。使用HTTP通信协议,可以为前端提供API。接口开发采用DAO模式,一个DAO类关联着相关的实体类,并且对应一个DAO实现类。通过这种方式可以方便快捷地通过接口查询到数据库中的数据。如果需要对某模块进行增、删、改、查操作,则可以直接调用该DAO类来实现[6]。
1 系统功能设计
本系统主要包含四个模块:微课学习、课堂互动、错题集、学情分析。数据库设计采用关系型数据库,所有表均满足第二范式。共设计有51张数据表,如图2所示,每张表的每一项数据都有唯一的ID,这样可以方便以后的操作,不会因为某一列有重复数据导致缺失主键。
1.1 微课学习模块
微课学习模块如图3所示,主要包含了该学校提供的微课程,用户可以根据年级、科目以及教课老师等分类进行筛选查询。学生可以为每门课程进行评分,评分高的课程将会出现在“推荐课程”栏目中。学生也可以对每门课程进行评论,用来发表观后感。在观看微课后,学生可以在视频下面的笔记模块记录学习心得。该条记录会在该学生每次打开这个视频的时候显示在下方。学生也可以在视频下方的答疑模块提出观看视频后存在的疑问,该疑问会出现在老师的个人中心,老师可以对其进行记录并回复。每个微课视频后都有老师布置的该科作业,学生的做题记录会反馈到老师端,这样老师就可以及时了解到学生的知识薄弱点,并且对上课的讲述重点进行相应的调整。
1.2 课堂互动模块
课堂互动模块如图4所示,主要用于活跃课堂气氛,增加老师与学生的交流。老师进入该模块后首先选择其正在上课的班级,再选择其正在上课的科目(老师可能教多门课),最后选择其之前上传的题组。老师可以对题组中的题目进行选择,选择完毕后发送给学生进行抢答(选择和判断题)。进入抢答界面后,若老师点击了开始抢答,则计时器会启动,在这段时间内,该班级在线的学生将会收到老师开启抢答的题目,并且可以进行作答。学生作答的实时结果会通过柱状图反应给教师,老师点击选项对应的柱状图后会显示选择该选项的所有学生。当老师点击了停止抢答或者抢答时间到了之后,学生端也会显示出全班的作答情况,并且显示出正确答案。做错的题目会通过后台自动加入到该生的错题集。老师也可以根据该题目的对错人数进行详细的讲解。
1.3 错题集模块
错题集多数情况由后台操作,学生在课堂上或者课后做错的题目都会自动加入该科目所在的错题集,学生点击后可以查看到该题目的正确答案和详细解答过程,如图5所示。
1.4 学情分析模块
学情分析模块主要是帮助老师和学生更加直观地了解到班级以及自己的学习情况,如图6所示。通过对比班级的历次成绩以及自身的成绩,就可以让学生了解到自己在这段时间的学习情况。老师也可以查看到年级中所有班级的平均分来分析自己在这段时间的教学成果。
2 系统实现关键技术
2.1 视频播放手势控制
观看微课时,用户可以通过左右滑动来控制快进和后退、上下滑动来调整音量以及双击进入全屏和退出全屏。因为视频播放本身是在一个scrollview中,需要先在视频控件中避免父控件拦截触摸事件,使用requestDisallowInterceptTouchEvent(true)来实现。
滑动的监听事件主要是通过GestureDetector类来识别手势。滑动快进时需要同时调整进度条和当前播放时间以及判断是否播放完毕。双击全屏则是通过判断两次点击的间隔时间来做操作。因视频播放本身是一个fragment,所以全屏时需要修改侧边栏的属性为GONE。
如下代码可以实现视频的手势快进:
if(Math.abs(distanceX)>Math.abs(distanceY)){
//横向移动大于纵向移动
if(distanceX>=DpPxConvert.dip2px(((Activity)context),STEP_PROGRESS)){ //快退,用步长控制改变速度,可微调
gesture_iv_progress.setImageResource
(R.drawable.class_souhu_player_backward);
if(playerCurrentPosition>3*1000){//避免为负
playerCurrentPosition-=3*1000;
//scroll方法执行一次快退3 s
mediaPlayer.seekTo((int)playerCurrentPosition);
}else{
playerCurrentPosition=3*1000;
mediaPlayer.seekTo((int)playerCurrentPosition);
}
}else if(distanceX<=
-DpPxConvert.dip2px(((Activity)context),
STEP_PROGRESS)){//快进
gesture_iv_progress.setImageResource
(R.drawable.class_souhu_player_forward);
if(playerCurrentPosition<playerDuration-16*1000){
//避免超过总时长
playerCurrentPosition+=3*1000;
//scroll执行一次快进3 s
mediaPlayer.seekTo((int)playerCurrentPosition);
}else{
playerCurrentPosition=playerDuration-10*1000;
mediaPlayer.seekTo((int)playerCurrentPosition);
}
}
}
2.2 多线程交互
课堂互动的抢答功能是使用定时轮询来请求数据。主线程无法访问网络,所以需要开辟新线程来请求网络资源。线程中需要请求:老师总共开启的题目数、当前为第几道题目、每个选项选择的人数、题目内容和答案解析、班级的人数、当前提交的人数等。因为不同时期需要请求不同的数据也就是开启不同的线程,这就需要使用flag来控制线程的开和闭。
2.3 自定义Imageview
很多图片因为移动设备尺寸限制导致图片尺寸不够大,这时就需要放大。放大就要通过自定义的imageview来实现原先没有的功能,如手势放大和拖拽移动。实现这些功能需要获取屏幕大小、图片大小、放大缩小的极限值、缩放手势时两指的距离、触摸的位置等。根据触摸点为一点或两点(getPointerCount)来判断是拖拽还是缩放;再根据两指的移动距离来判断缩放的比例。
如下代码可以实现图片拖拽缩放:
if(scale>1&& this.getWidth()<=MAX_W){
current_Left=this.getLeft()-disX;
current_Top=this.getTop()-disY;
current_Right=this.getRight()+disX;
current_Bottom=this.getBottom()+disY;
this.setFrame(current_Left,current_Top,current_Right,current_Bottom);
/****此时考虑到对称,只做一遍判断就可以*/
if(current_Top<=0 && current_Bottom>=screen_H){
isControl_V=true;//开启垂直监控
}else{
isControl_V=false;
}
if(current_Left<=0&& current_Right>=screen_W){
isControl_H=true;//开启水平监控
}else{
isControl_H=false;
}
}
2.4 Afinal加载图片
Afinal是一个orm、ioc框架,遵循约定大于配置原则,无需任何配置即可完成所有工作,但也可以通过配置去满足个人的个性化需求。Afinal提倡代码快速简洁。在Android开发中,图片的显示必不可少,由于Android运行平台的特点,在加载图片,特别是加载网络图片时,一般都会完成图片的缓存,从而减少Android系统的运行负荷。而完成图片的缓存,又分为两种,一种是完成图片的本地缓存,即把网络加载过的图片放在本地,这样当下次再次加载相同图片时,就可以直接从本地的硬盘中获取图片,从而提高图片的加载速度,更重要的是减少流量和手机电量的损耗。另一种就是缓存在内存的机制。使用afinal,当listview滑动加载图片时就会从内存中获取图片资源。
如下代码可以实现从网络获取图片:
private FinalBitmap fb;
fb=FinalBitmap.create(context);
fb.display(View imageView,String uri,int imageWidth,int imageHeight);//分别传入显示图片的imageview控件,
图片的url,图片的宽度,图片的高度
2.5 后台数据库查询封装JDBC
本项目数据库共有51张表,因为牵涉到大量的数据处理与查询,所以需要健壮的方法来完成数据的处理,包括异常的捕捉、sql语句的执行以及查询结果的转换等。
3 系统的实现
微课学习包括了学校提供的视频课程、学生可以观看老师安排的课程和自己感兴趣的课程,并且对视频进行评价以及提出疑问。如图7所示。
错题集模块用于记录学生在本系统中课堂和课后做错的题目;学生也可以上传自己在线下的错题。每道错题都包含了正确答案和详细的解析,便于学生进行复习巩固,如图8所示。
学情分析是教学效果的体现,用于分析学生某阶段的学习情况。师生可以查询到每次考试的班级平均分以及个人在班级中所处的情况,这些数据都是通过折线图的形式表现出来,如图9所示。
通过长时、多次的数据分析可以得出每位学生的雷达图,雷达图中显示学生的强项和弱项,让学生可以更加了解自身的情况,如图10所示。
4 结论
当今的教育要求学生有较强的自学能力,有自己的思想,会合理安排自己的时间,翻转课堂使学生可以通过互联网去使用优质的教育资源,不再是单单地从课堂上获取知识。基于Android的翻转式课堂教学APP软件,包含了微课学习、课堂互动、错题集和学情分析等功能,适应了现代教学的需求,老师根据学生课后作业的情况提前对讲课重点进行调整,通过该软件能很好地将翻转课堂运用到教学实践中,为课堂教学改革提供新的可能。
参考文献
[1] 秦炜炜.翻转学习:课堂教学改革的新范式[J].电化教育研究,2013(8):84-90.
[2] 台大校训.哈佛大学教授Eric Mazur莅校演讲开启互动教学与创意实验蓝图[N].2010-06-16(4).
[3] MAZUR E. Can we teach computers to teach[J]. Computers in Physics,1991,5(1):31-37.
[4] 李佐彬.Android开发入门与实战体验[M].北京:机械工业出版社,2011.
[5] 迈耶(Reto Meier).Android4高级编程(第3版)[M].余建伟,赵凯,译.北京:清华大学出版社,2013.
[6] 孙卫琴,李洪成.Tomcat与Java Web开发技术详解(第2版)[M].北京:电子工业出版社,2009.