中國(guó)傳媒大學(xué) 喻 進(jìn) 駱新全
?
Android平臺(tái)電子電路實(shí)驗(yàn)教學(xué)應(yīng)用的開(kāi)發(fā)
中國(guó)傳媒大學(xué) 喻 進(jìn) 駱新全
【摘要】為了使學(xué)生及時(shí)掌握電子電路實(shí)驗(yàn)的操作,提出了Android平臺(tái)的電子電路實(shí)驗(yàn)教學(xué)應(yīng)用。該應(yīng)用借助Android中繪圖、觸控的應(yīng)用程序接口,設(shè)計(jì)了移動(dòng)終端上的電子電路技術(shù)實(shí)驗(yàn)練習(xí)模塊,提高了教學(xué)輔助系統(tǒng)的交互體驗(yàn),突顯出這種移動(dòng)終端應(yīng)用所具有的可用性和有效性。
【關(guān)鍵詞】電子電路;Android;實(shí)驗(yàn)教學(xué)
電子電路實(shí)驗(yàn)課是通信電子類(lèi)專(zhuān)業(yè)教學(xué)內(nèi)容的重要組成部分。通過(guò)在實(shí)驗(yàn)室操作真實(shí)儀器和電路,學(xué)生完成各種類(lèi)型的實(shí)驗(yàn)任務(wù)?;趥鹘y(tǒng)臺(tái)式機(jī)的教學(xué)輔助系統(tǒng)可供學(xué)生完成各類(lèi)電子電路的實(shí)驗(yàn)練習(xí),表達(dá)輸出測(cè)試結(jié)果。然而隨著個(gè)人移動(dòng)終端的普及,受到體積的限制,傳統(tǒng)的教學(xué)輔助系統(tǒng)無(wú)法滿(mǎn)足移動(dòng)場(chǎng)景下的需求。
當(dāng)前在Android應(yīng)用市場(chǎng)上相對(duì)成熟的應(yīng)用有Circuit Jam和EveryCricuit。Circuit Jam將若干電路由易到難排列,用戶(hù)需要操作電路圖來(lái)配合當(dāng)前顯示的波形,過(guò)程中電路復(fù)雜度不斷增長(zhǎng),用戶(hù)也會(huì)對(duì)電路有更深刻的了解。EveryCricuit則允許用戶(hù)查看經(jīng)典的電路圖,并可創(chuàng)建自己的電路,觀看動(dòng)態(tài)的電流、電壓動(dòng)畫(huà),這為用戶(hù)深入認(rèn)識(shí)電路及其工作方式提供了很強(qiáng)的靈活性。
國(guó)外成熟的電子電路實(shí)驗(yàn)應(yīng)用,為設(shè)計(jì)開(kāi)發(fā)適合國(guó)內(nèi)教學(xué)特點(diǎn)的應(yīng)用提供了有益的參考。針對(duì)以上分析,本文提出了Android平臺(tái)的電子電路實(shí)驗(yàn)教學(xué)應(yīng)用,以此作為傳統(tǒng)教學(xué)輔助系統(tǒng)的補(bǔ)充,能使學(xué)生在課下隨時(shí)隨地復(fù)習(xí)和掌握有關(guān)電子電路的相關(guān)技能,從而提高電子電路實(shí)驗(yàn)的教學(xué)效果。
圖2-1 應(yīng)用結(jié)構(gòu)示意
2.1設(shè)計(jì)思路
電子電路實(shí)驗(yàn)按照類(lèi)別的不同,設(shè)計(jì)成LineActivity、MoveActivity和FlipActivity三種模式。應(yīng)用中所設(shè)計(jì)的活動(dòng)類(lèi)、基類(lèi)等組件的結(jié)構(gòu)示意如圖2-1所示。
應(yīng)用所包含的活動(dòng)類(lèi)分別要完成三類(lèi)實(shí)驗(yàn)?zāi)J?,只要是符合某個(gè)模式的實(shí)驗(yàn)內(nèi)容,都可以在對(duì)應(yīng)活動(dòng)類(lèi)中完成初始化。在LineActivity中,學(xué)生根據(jù)實(shí)驗(yàn)要求連接電路,輕點(diǎn)測(cè)量表筆和電路節(jié)點(diǎn),由此生成若干電路連線(xiàn),且可劃斷某個(gè)連線(xiàn);而在MoveActivity中,學(xué)生選擇元件或儀器,拖拽它們到指定電路的空缺處;在MoveActivity的基礎(chǔ)上設(shè)計(jì)的FlipActivity,允許學(xué)生旋轉(zhuǎn)元件以完成電路。
結(jié)構(gòu)示意圖下部分的兩個(gè)基類(lèi),即代表電路圖層對(duì)象和節(jié)點(diǎn)對(duì)象,它們分別定義了電路圖層對(duì)象和節(jié)點(diǎn)對(duì)象的坐標(biāo)、寬和高、移動(dòng)方法、位置方法、碰撞檢測(cè)方法、是否可見(jiàn)方法以及繪制方法等,方便對(duì)實(shí)驗(yàn)界面里的電路圖層和節(jié)點(diǎn)進(jìn)行控制。
列表活動(dòng)類(lèi)ListActivity則負(fù)責(zé)顯示實(shí)驗(yàn)列表并提供啟動(dòng)相應(yīng)活動(dòng)類(lèi)的入口。
2.2模塊流程圖
結(jié)構(gòu)示意圖中,各活動(dòng)類(lèi)涉及的模塊流程圖如圖2-2所示。
各個(gè)活動(dòng)類(lèi)負(fù)責(zé)處理如點(diǎn)按、拖拽這樣的觸摸事件。從模塊流程圖可看出,模塊的核心是不斷的繪圖和刷新界面,而判斷正誤的規(guī)則寫(xiě)入各個(gè)實(shí)驗(yàn)中,提交后便可見(jiàn)到判定結(jié)果并顯示正確答案。
圖2-2 活動(dòng)類(lèi)設(shè)計(jì)的流程圖
電子電路實(shí)驗(yàn)有以下幾個(gè)關(guān)鍵問(wèn)題,下面列出相應(yīng)解決方案及其代碼片段。
3.1LineActivity的觸摸響應(yīng)邏輯
LineActivity的功能是學(xué)生可以通過(guò)點(diǎn)擊儀器的測(cè)量表筆和電路節(jié)點(diǎn)完成儀器和電路的連接,并且可以劃斷電路連線(xiàn)以重新連線(xiàn)。圖3-1是觸摸事件和相應(yīng)判斷邏輯關(guān)系的示意。
圖3-1 LineActivity觸摸響應(yīng)邏輯示意
3.1.1連接測(cè)量表筆和節(jié)點(diǎn)
在Activity里定義了判斷是否連線(xiàn)成功的方法line(),節(jié)點(diǎn)被判斷為點(diǎn)擊之后調(diào)用這個(gè)方法,若連線(xiàn)成功,則調(diào)用視圖類(lèi)(View)的postInvalidate()方法刷新界面,重繪時(shí)調(diào)用Canvas類(lèi)的drawLine()方法繪制直線(xiàn)。
代碼片段:
3.1.2劃斷電路間的連線(xiàn)
在節(jié)點(diǎn)類(lèi)CircuitPoint里定義了判斷觸摸點(diǎn)是否劃過(guò)電路連線(xiàn)坐標(biāo)范圍內(nèi)的方法,只要在Activity的onTouchEvent()方法中獲取觸摸點(diǎn)坐標(biāo),并調(diào)用isCut()方法就能判斷連線(xiàn)是否被切斷。若被切斷,則在該連線(xiàn)坐標(biāo)范圍繪制一條與畫(huà)布背景顏色相同的直線(xiàn)。下面片段是連線(xiàn)為豎直方向的方法,即比較觸摸點(diǎn)與連線(xiàn)的對(duì)應(yīng)坐標(biāo)值,水平方向與之類(lèi)似。
代碼片段:
3.2MoveActivity的觸摸響應(yīng)邏輯
MoveActivity的功能是學(xué)生可以通過(guò)拖動(dòng)元件或儀器至目標(biāo)框中完成選擇,若未完成選擇,元件或儀器自動(dòng)回到原位置。圖3-2是觸摸事件和屬性動(dòng)畫(huà)之間關(guān)系的示意。
圖3-2 MoveActivity觸摸響應(yīng)邏輯示意
3.2.1對(duì)象與目標(biāo)的碰撞檢測(cè)
在CircuitPart里定義判斷是否拖拽成功的方法crash(),該方法通過(guò)對(duì)觸摸點(diǎn)離開(kāi)屏幕時(shí)圖片的位置和目標(biāo)框進(jìn)行坐標(biāo)比較,從而判斷對(duì)象是否已經(jīng)在目標(biāo)范圍內(nèi)。
代碼片段:
3.2.2借助屬性動(dòng)畫(huà)處理取消事件
用戶(hù)拖拽某個(gè)對(duì)象中途要放棄而選擇另一個(gè),那么當(dāng)前的對(duì)象應(yīng)該回到初始位置,而直接設(shè)置界面上會(huì)有明顯的閃爍,可以借助屬性動(dòng)畫(huà)改善。屬性動(dòng)畫(huà)可以在指定時(shí)間內(nèi)改變一個(gè)對(duì)象的屬性。下面的例子指定的動(dòng)畫(huà)屬性為對(duì)象在屏幕上的橫縱坐標(biāo),animator對(duì)象會(huì)計(jì)算出圖片當(dāng)前位置到原來(lái)位置的距離,然后執(zhí)行動(dòng)畫(huà)便可。
代碼片段:
3.3FlipActivity的觸摸響應(yīng)邏輯
此活動(dòng)類(lèi)在MoveActivity的基礎(chǔ)上,能讓學(xué)生先旋轉(zhuǎn)元件,再點(diǎn)按元件拖動(dòng)到指定位置以完成選擇。對(duì)于二極管等具有方向性的元件,該活動(dòng)類(lèi)增強(qiáng)了實(shí)驗(yàn)的可操作性。圖3-3是觸摸事件和旋轉(zhuǎn)動(dòng)畫(huà)之間關(guān)系的示意。
圖3-3 FlipActivity觸摸響應(yīng)邏輯示意
3.3.1實(shí)現(xiàn)元件在觸摸后旋轉(zhuǎn)
在應(yīng)用中,元件的實(shí)質(zhì)是Bitmap類(lèi)對(duì)象,可以使用矩陣類(lèi)Matrix的postRotate方法對(duì)其執(zhí)行旋轉(zhuǎn)操作,把旋轉(zhuǎn)后的Bitmap返回給自身。不過(guò)這種方法使得旋轉(zhuǎn)在調(diào)用的時(shí)候已經(jīng)發(fā)生,看起來(lái)會(huì)比較生硬,缺乏靈活性。
為了讓旋轉(zhuǎn)在特定時(shí)間內(nèi)發(fā)生,自定義一個(gè)旋轉(zhuǎn)動(dòng)畫(huà)監(jiān)聽(tīng)器類(lèi),用以實(shí)現(xiàn)ValueAnimator類(lèi)的監(jiān)聽(tīng)器接口,把旋轉(zhuǎn)角度、旋轉(zhuǎn)軸坐標(biāo)值作為參數(shù)供其計(jì)算屬性值。
代碼片段:
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); ... } }
監(jiān)聽(tīng)器類(lèi)對(duì)象負(fù)責(zé)處理旋轉(zhuǎn)事務(wù),可以為屬性動(dòng)畫(huà)對(duì)象指定一個(gè)該類(lèi)對(duì)象,由于setRotateAnimation傳入的參數(shù)中包含元件所代表的矩陣,因此可對(duì)任意指定的元件對(duì)象設(shè)置旋轉(zhuǎn)動(dòng)畫(huà)。其后,可以為屬性動(dòng)畫(huà)對(duì)象指定持續(xù)時(shí)間并令其觸發(fā)。
3.3.2分配不同的觸摸響應(yīng)邏輯
在此活動(dòng)類(lèi)中,元件有被旋轉(zhuǎn)和被拖動(dòng)兩種狀態(tài);被拖動(dòng)如同MoveActivity分配到ACTION_MOVE事件中,而被旋轉(zhuǎn)則分配到ACTION_UP,即手指在屏幕上抬起。元件被旋轉(zhuǎn)的狀態(tài)之所以不分配到ACTION_DOWN,主要是由于ACTION_MOVE事件起始于ACTION_DOWN,如果旋轉(zhuǎn)狀態(tài)分配到ACTION_DOWN,將會(huì)出現(xiàn)在一個(gè)手勢(shì)中旋轉(zhuǎn)并拖動(dòng)的現(xiàn)象。
為解決這一沖突問(wèn)題,將被旋轉(zhuǎn)分配到ACTION_UP事件中,這樣輕點(diǎn)元件并抬起只響應(yīng)旋轉(zhuǎn),按住元件并移動(dòng)則響應(yīng)拖動(dòng)。另外在ACTION_MOVE事件中,還要判斷元件是否處于豎直狀態(tài),若沒(méi)有,則彈出相應(yīng)提示對(duì)話(huà)框。
代碼片段:
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事件中,輕點(diǎn)二極管元件并抬起,使得二極管繞自身中心旋轉(zhuǎn)了90度。
判斷豎直狀態(tài)的邏輯比較簡(jiǎn)單,對(duì)每個(gè)元件設(shè)置一個(gè)整型flipNum值,也就是旋轉(zhuǎn)次數(shù),初始化為零。對(duì)于各個(gè)元件,每旋轉(zhuǎn)一次flipNum自增1,判斷時(shí)為flipNum對(duì)2取余,也就是說(shuō),旋轉(zhuǎn)次數(shù)為偶數(shù)便會(huì)彈出提示。至于拖動(dòng)以分配到不同的結(jié)果時(shí),亦是對(duì)旋轉(zhuǎn)次數(shù)取余的方法來(lái)判斷當(dāng)前選擇元件的狀態(tài)。
4.1運(yùn)行效果示意
下面是應(yīng)用內(nèi)包含的實(shí)驗(yàn)內(nèi)容及其對(duì)應(yīng)的活動(dòng)類(lèi)。
電子電路實(shí)驗(yàn)中,連線(xiàn)的實(shí)驗(yàn)如圖4-1所示。在此劃斷了一根連線(xiàn),并把萬(wàn)用表的表筆和劃去后的節(jié)點(diǎn)連接了起來(lái)。
電子電路實(shí)驗(yàn)中,旋轉(zhuǎn)元件并拖動(dòng)來(lái)填充電路的實(shí)驗(yàn)如圖4-2所示。在此先輕點(diǎn)二極管使其為豎直方向,再將它點(diǎn)按拖動(dòng)了虛線(xiàn)框里,從而完成電路填充。
圖4 1LineActivity實(shí)例,萬(wàn)用表測(cè)量電流,劃斷電路以連線(xiàn)
圖4-2 FlipActivity實(shí)例,二極管基本電路,旋轉(zhuǎn)元件填充電路
4.2總結(jié)與展望
本文描述了在基于Android系統(tǒng)的移動(dòng)終端上實(shí)現(xiàn)電子電路實(shí)驗(yàn)的方法和過(guò)程,充分運(yùn)用Android SDK中的組件和方法,結(jié)合電子電路實(shí)驗(yàn)課的實(shí)際,解決了包括繪圖、觸摸響應(yīng)邏輯等問(wèn)題。不過(guò),本研究的實(shí)際效果還略顯粗糙,在業(yè)務(wù)邏輯和技術(shù)實(shí)現(xiàn)上還有進(jìn)一步改良的空間。
個(gè)人移動(dòng)終端的繁榮為移動(dòng)開(kāi)發(fā)者提供了廣闊的平臺(tái),而在Android平臺(tái)上服務(wù)于教育教學(xué)的應(yīng)用仍相對(duì)匱乏。相信隨著應(yīng)用市場(chǎng)的逐漸成熟,創(chuàng)新的實(shí)踐方法被不斷擴(kuò)充,更加豐富優(yōu)質(zhì)的實(shí)驗(yàn)教學(xué)類(lèi)應(yīng)用將供高校師生使用。
[1]魯學(xué)亮,陳金燾,孫秋瑞,劉臻.移動(dòng)校園轉(zhuǎn)型實(shí)踐——基于WebApp的移動(dòng)應(yīng)用客戶(hù)端設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)教育信息化,2013,21:17-20.
[2]劉歡,盧蓓蓉,馬晨輝.淺析高校校園移動(dòng)應(yīng)用開(kāi)發(fā)[C].武漢大學(xué)學(xué)報(bào)(理學(xué)版),2012.
[3]馬建平,奚亮亮.基于移動(dòng)應(yīng)用的校園信息服務(wù)系統(tǒng)[C].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012.
[4]徐宜生.Android群英傳[M].北京:電子工業(yè)出版社,2015.
[5]任玉剛.Android開(kāi)發(fā)藝術(shù)探索[M].北京:電子工業(yè)出版社,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.