版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《騰訊1+x安卓應(yīng)用開發(fā)(中級)》教案
一、教案設(shè)計課題項目2任務(wù)1圖形的繪制課型理論課理論課時1課時實踐課時2課時教學(xué)目標知識目標能力(技能)目標掌握圖形繪制的常用類和方法能夠掌握安卓平臺下圖形的繪制。教學(xué)重點圖形的繪制方法。教學(xué)難點圖形繪制的常用類和方法的靈活使用教學(xué)內(nèi)容Android界面中可以繪制各種圖形,其中主要涉及4個類,分別是View、Canvas、Paint和Color。1.View類在Android中繪制圖形需要在Canvas上進行,而使用Canvas需要使用View.onDraw()方法完成繪制工作,因此,需要定義一個android.view包中的View類的子類,然后復(fù)寫onDraw()方法。格式如下。classMyViewextendsView{@OverrideprotectedvoidonDraw(Canvascanvas){}}2.Canvas類Canvas類相當于畫布,定義在android.graphics包中,它給我們提供了一套畫圖API,常用的方法如下。(1)publicvoiddrawBitmap(Bitmapbitmap,floatleft,floattop,Paintpaint)表5-1drawBitmap方法參數(shù)介紹drawBitmap的作用:繪制位圖bitmap要繪制的位圖,此值不能為null。left正在繪制的位圖左側(cè)的位置。top正在繪制的位圖頂部的位置。paint用于繪制位圖的畫筆,此值可能是null。(2)publicvoiddrawCircle(floatcx,floatcy,floatradius,Paintpaint)表5-2drawCircle方法參數(shù)介紹drawCircle的作用:繪制圓形cx要繪制的圓的中心的x坐標。cy要繪制的圓的中心的y坐標。radius要繪制的圓的半徑。paint用來畫圓的畫筆,此值不能是null。(3)publicvoiddrawLine(floatstartX,floatstartY,floatstopX,floatstopY,Paintpaint)表5-3drawLine方法參數(shù)介紹drawLine的作用:繪制線條startX線條起點的x坐標。startY線條起點的y坐標。stopX線條終點的x坐標。stopY線條終點的y坐標。paint用于繪制線條的畫筆,此值不能是null。(4)publicvoiddrawOval(RectFoval,Paintpaint)表5-4drawOval方法參數(shù)介紹drawOval的作用:繪制橢圓。oval要繪制的橢圓形矩形邊界,這個值不能是null。paint畫筆,此值不能是null。(5)publicvoiddrawPath(Pathpath,Paintpaint)表5-5drawPath方法參數(shù)介紹drawPath的作用:繪制路徑path要繪制的路徑,此值不能是null。paint用于繪制路徑的畫筆,此值不能是null。(6)publicvoiddrawPoint(floatx,floaty,Paintpaint)表5-6drawPoint方法參數(shù)介紹drawPoint的作用:繪制點x要繪制的圓的x軸。y要繪制的圓的y軸。paint畫筆,此值不能是null。(7)publicvoiddrawText(Stringtext,floatx,floaty,Paintpaint)表5-7drawText方法參數(shù)介紹drawText的作用:繪制文本text擬繪制的文本,此值不能是null。x正在繪制的文本的x坐標y正在繪制的文本的y坐標paint畫筆,此值不能是null。3.Paint類Paint類相當于畫筆,定義在android.graphics包中,可以用來設(shè)置繪圖時的顏色、字體等,常用的方法如下。(1)publicvoidsetARGB(inta,intr,intg,intb)表5-8setARGB方法參數(shù)介紹setARGB的作用:設(shè)置顏色a畫筆的透明度,取值范圍0-255。r畫筆的紅色成分,取值范圍0-255。g畫筆的綠色成分,取值范圍0-255。b畫筆的藍色成分,取值范圍0-255。(2)publicvoidsetAlpha(inta)表5-9setAlpha方法參數(shù)介紹setAlpha的作用:設(shè)置透明的a畫筆的透明度,取值范圍0-255。(3)publicvoidsetAntiAlias(booleanaa)表5-10setAntiAlias方法參數(shù)介紹setAntiAlias的作用:設(shè)置抗鋸齒aa值為true時,消除鋸齒值為false時,保留鋸齒(4)publicvoidsetColor(intcolor)表5-11setColor方法參數(shù)介紹setColor的作用:設(shè)置顏色color畫筆的顏色,Android內(nèi)部定義有Color類,包含了一些常見顏色定義。(5)publicvoidsetStyle(Paint.Stylestyle)表5-12setStyle方法參數(shù)介紹setStyle的作用:設(shè)置繪制風(fēng)格stylePaint.Style.FILL:填充內(nèi)部Paint.Style.FILL_AND_STROKE:填充內(nèi)部和描邊Paint.Style.STROKE:僅描邊(6)publicvoidsetTextAlign(Paint.Alignalign)表5-13setTextAlign方法參數(shù)介紹setTextAlign的作用:設(shè)置文本對齊方式alignPaint.Align.LEFT:左對齊Paint.Align.CENTER:居中對齊Paint.Align.RIGHT:右對齊(7)publicvoidsetTextScaleX(floatscaleX)表5-14setTextScaleX方法參數(shù)介紹setTextScaleX的作用:設(shè)置文本水平方向縮放比例scaleX文本水平方向的繪制比例。默認值為1.0。值>1.0將放大。值<1.0將縮小。(8)publicvoidsetTextSize(floattextSize)表5-15setTextSize方法參數(shù)介紹setTextSize的作用:設(shè)置文本大小textSize文本大小,以像素為單位。此值必須為>0。(9)publicTypefacesetTypeface(Typefacetypeface)表5-16setTypeface方法參數(shù)介紹setTypeface的作用:設(shè)置文本樣式typefaceTypeface.BOLD為粗體,Typeface.BOLD_ITALIC為粗斜體,Typeface.ITALIC為斜體,Typeface.NORMAL為正常。(10)publicvoidsetUnderlineText(booleanunderlineText)表5-17setUnderlineText方法參數(shù)介紹setUnderlineText的作用:設(shè)置下劃線文字underlineText值為true時,設(shè)置下劃線。值為false時,取消下劃線。4.Color類Color類在android.graphics包中。定義了很多常量的顏色值,可以通過Color.***使用。典型的顏色值如下。publicstaticfinalintBLACK=-16777216;//黑色publicstaticfinalintBLUE=-16776961;//藍色publicstaticfinalintCYAN=-16711681;//青色publicstaticfinalintGRAY=-7829368;//灰色publicstaticfinalintGREEN=-16711936;//綠色publicstaticfinalintRED=-65536;//紅色publicstaticfinalintTRANSPARENT=0;//透明色publicstaticfinalintWHITE=-1;//白色publicstaticfinalintYELLOW=-256;//黃色Color類還定義了一些靜態(tài)方法,如下所示。publicstaticintalpha(intcolor))//透明度分量publicstaticintred(intcolor))//紅色分量publicstaticintgreen(intcolor))//綠色分量publicstaticintblue(intcolor)//藍色分量publicstaticintrgb(intred,intgreen,intblue)//由紅綠藍三原色組成的顏色值publicstaticintargb(intalpha,intred,intgreen,intblue)//由透明度和紅綠藍三原色組成的顏色值教學(xué)準備教材,PPT、教綱、教案參考資料/教學(xué)過程方法與手段教學(xué)備注【課堂導(dǎo)入】常見的二維圖形在Android中是如何繪制的呢?AndroidAPI提供一系列進行2D繪圖的方法,這些方法放置在android.graphics包下,graphics中包括了Canvas、Paint、Color、Bitmap等類,具有繪制點、線、顏色、2D幾何圖形、圖像處理等功能?!窘虒W(xué)實施】5.1.1任務(wù)描述利用Canvas、Paint和Color等類繪制如圖所示的指南針表盤。5.1.2問題引導(dǎo)常見的二維圖形在Android中是如何繪制的呢?AndroidAPI提供一系列進行2D繪圖的方法,這些方法放置在android.graphics包下,graphics中包括了Canvas、Paint、Color、Bitmap等類,具有繪制點、線、顏色、2D幾何圖形、圖像處理等功能。5.1.3知識準備View類的作用Canvas類的常用方法Paint類的常用方法Color類定義的常量顏色值和靜態(tài)方法5.1.4完成指南針表盤的繪制5.1.5知識拓展利用Canvas類提供的不同方法繪制出不同的圖形利用Bitmap、BitmapFactory和Matrix對圖形圖像進行處理【知識(技能)鞏固練習(xí)】分別繪制出矩形、圓形和三角形?!窘虒W(xué)小結(jié)】講授、演示課后作業(yè)與訓(xùn)練完成項目2課后練習(xí)對應(yīng)的習(xí)題。教學(xué)反思
課題項目2任務(wù)2屬性動畫的實現(xiàn)課型理論課理論課時2課時實踐課時2課時教學(xué)目標知識目標能力(技能)目標理解屬性動畫的實現(xiàn)原理能夠掌握安卓平臺下屬性動畫的實現(xiàn)。教學(xué)重點屬性動畫的實現(xiàn)方法。教學(xué)難點屬性動畫的實現(xiàn)原理教學(xué)內(nèi)容屬性動畫的實現(xiàn)機制是通過對目標對象進行賦值并修改其屬性來實現(xiàn)的。例如修改目標對象的alpha屬性值,可以實現(xiàn)透明度的變化;修改目標對象的rotation屬性值可以實現(xiàn)旋轉(zhuǎn)角度的變化。ValueAnimator是整個屬性動畫機制中最核心的一個類,負責(zé)計算初始值和結(jié)束值之間的動畫過渡,我們只需要將初始值和結(jié)束值提供給ValueAnimator,并告訴它動畫運行的時長,ValueAnimator就會幫我們完成從初始值過渡到結(jié)束值的效果。此外,ValueAnimator還負責(zé)管理動畫的播放次數(shù)、播放模式、以及對動畫設(shè)置監(jiān)聽器等。例如,通過下面的代碼可以實現(xiàn)將一個值從0平滑過渡到1,重復(fù)播放3次,每次播放時長是300毫秒。ValueAnimatoranim=ValueAnimator.ofFloat(0f,1f);anim.setDuration(300);//播放時長anim.setRepeatCount(3);//播放次數(shù)anim.setRepeatMode(ValueAnimator.REVERSE);//播放模式:反向播放anim.start();//開始播放ObjectAnimator是ValueAnimator的一個子類,也是我們最常接觸到的類。ValueAnimator只是對值進行了一個平滑的過渡,而ObjectAnimator則可以直接對任意對象的任意屬性進行動畫操作。通過調(diào)用ofFloat()方法來去創(chuàng)建一個ObjectAnimator的實例,該方法的第一個參數(shù)用來指定動畫作用的目標對象,第二個參數(shù)用來指定需要變化的是哪個屬性,第三個參數(shù)是長度可變的float數(shù)據(jù),用來指定動畫變化過程中屬性的值。publicstaticObjectAnimatorofFloat(Objecttarget,StringpropertyName,float...values)下面分別對透明度、旋轉(zhuǎn)、縮放、平移四種屬性動畫進行講解。1.透明度動畫透明度動畫主要通過指定目標對象的透明度在動畫過程中的值,以及動畫持續(xù)的時間來實現(xiàn)的。代碼如下:ObjectAnimatoralpha=ObjectAnimator.ofFloat(imageView,"alpha",0f,1f);alpha.setRepeatCount(2);alpha.setRepeatMode(ObjectAnimator.REVERSE);alpha.setDuration(1000);alpha.start();上述代碼定義了一個透明度動畫,效果是,使imageView從完全透明變換到完全不透明,動畫時間是1秒,并且該動畫可以反向重復(fù)2次。表5-21透明度動畫ofFloat()方法的參數(shù)透明度動畫ofFloat()方法的參數(shù)imageView動畫作用在imageView上alpha對imageView的alpha屬性進行動畫操作0f,1falpha屬性的值從0變化到1。0表示完全都沒,1表示完全不透明。此處也可以根據(jù)動畫需要設(shè)置兩個以上的值。setRepeatCount(2):設(shè)置動畫重復(fù)次數(shù)為2次,如果設(shè)為-1,則表示重復(fù)無限次。setRepeatMode(ObjectAnimator.REVERSE):設(shè)置動畫重復(fù)的方式是反向重復(fù),如果設(shè)為ObjectAnimator.RESTART,則表示正向重復(fù)。setDuration(1000):設(shè)置動畫播放時長為1000毫秒。start():開始播放動畫。上述方法setRepeatCount()、setRepeatMode()、setDuration()、start()在其他屬性動畫中也可以使用,下面不再單獨介紹。2.旋轉(zhuǎn)動畫旋轉(zhuǎn)動畫主要通過指定目標對象的旋轉(zhuǎn)角度在動畫過程中的值,以及動畫持續(xù)的時間來實現(xiàn)的。代碼如下:ObjectAnimatorrotation=ObjectAnimator.ofFloat(imageView,"rotation",0f,180f,0f);rotation.setRepeatCount(2);rotation.setRepeatMode(ObjectAnimator.RESTART);rotation.setDuration(1000);imageView.setPivotX(0);//指定旋轉(zhuǎn)中心點的X坐標imageView.setPivotY(0);//指定旋轉(zhuǎn)中心點的Y坐標rotation.start();上述代碼定義了一個旋轉(zhuǎn)動畫,效果是,使imageView從0度旋轉(zhuǎn)到180度,再旋轉(zhuǎn)到0度,動畫時間是1秒,并且該動畫可以正向重復(fù)2次。表5-22旋轉(zhuǎn)動畫ofFloat()方法的參數(shù)旋轉(zhuǎn)動畫ofFloat()方法的參數(shù)imageView動畫作用在imageView上rotation對imageView的rotation屬性進行動畫操作0f,180f,0frotation屬性的值從0變化到180,再變化到0。0/180/90在這里指的是旋轉(zhuǎn)的角度值。此處值的個數(shù)可以根據(jù)動畫需要自行設(shè)置。默認情況下,旋轉(zhuǎn)動畫的中心點在目標對象的中心位置,如果想修改中心點,可以通過imageView.setPivotX()和imageView.setPivotY()指定旋轉(zhuǎn)中心點的X坐標和Y坐標。上述代碼中的imageView.setPivotX(0)和imageView.setPivotY(0),表示將imageView的左上角設(shè)置旋轉(zhuǎn)中心點。3.縮放動畫縮放動畫主要通過指定目標對象的scaleX和scaleY兩個屬性在動畫過程中的值,以及動畫持續(xù)的時間來實現(xiàn)的。代碼如下:AnimatorSetscale=newAnimatorSet();ObjectAnimatorscaleX=ObjectAnimator.ofFloat(imageView,"scaleX",1f,0.5f,1f);ObjectAnimatorscaleY=ObjectAnimator.ofFloat(imageView,"scaleY",1f,0.5f,1f);scale.setDuration(1000);scale.play(scaleX).with(scaleY);scale.start();上述代碼定義了一個縮放動畫,效果是,使imageView水平方向和垂直方向的尺寸同時從原來的大小縮小一半,再同時放大到原來的大小,動畫時間是1秒。由于在這里需要對兩個屬性的值操作,所以要用到動畫集合類AnimatorSet。scale.play(scaleX).with(scaleY);表示同時執(zhí)行scaleX和scaleY動畫。如果想先執(zhí)行scaleX,再執(zhí)行scaleY,則使用代碼scale.play(scaleY).after(scaleX);表5-23縮放動畫ofFloat()方法的參數(shù)縮放動畫ofFloat()方法的參數(shù)imageView動畫作用在imageView上scaleX對imageView的scaleX屬性進行動畫操作1f,0.5f,1fscaleX屬性的值從1變化到0.5,再變化到1。1/0.5/1在這里指的是目標對象原來尺寸的倍數(shù)。此處值的個數(shù)可以根據(jù)動畫需要自行設(shè)置。4.平移動畫平移動畫主要通過指定目標對象的translationX和translationY兩個屬性在動畫過程中的值,以及動畫持續(xù)的時間來實現(xiàn)的。代碼如下:AnimatorSettranslate=newAnimatorSet();ObjectAnimatortranslationX=ObjectAnimator.ofFloat(imageView,"translationX",0f,100f,0f);ObjectAnimatortranslationY=ObjectAnimator.ofFloat(imageView,"translationY",0f,100f,0f);translate.setDuration(1000);translate.play(translationY).after(translationX);translate.start();上述代碼定義了一個平移動畫,效果是,使imageView先向右移動100px,再向左平移回到原來的位置,然后向下移動100px,再向上平移回到原來的位置,動畫時間是1秒。由于在這里需要對兩個屬性的值進行操作,所以也用到了動畫集合類AnimatorSet。表5-24平移動畫ofFloat()方法的參數(shù)平移動畫ofFloat()方法的參數(shù)imageView動畫作用在imageView上translationX對imageView的translationX屬性進行動畫操作0f,100f,0ftranslationX屬性的值從0變化到100,再變化到0。此處值的個數(shù)可以根據(jù)動畫需要自行設(shè)置。教學(xué)準備教材,PPT、教綱、教案參考資料/教學(xué)過程方法與手段教學(xué)備注【課堂導(dǎo)入】屬性動畫是如何實現(xiàn)動畫效果的呢?屬性動畫是通過對目標對象的進行賦值并修改其屬性來實現(xiàn)的。例如修改目標對象的Alpha屬性值,可以實現(xiàn)透明度的變化;修改目標對象的BackgroundColor屬性值可以實現(xiàn)背景色的變化?!窘虒W(xué)實施】5.2.1任務(wù)描述點擊不同的按鈕能實現(xiàn)4種不同的屬性動畫效果:透明度動畫、旋轉(zhuǎn)動畫、縮放動畫和平移動畫。如圖所示。5.2.2問題引導(dǎo)屬性動畫是如何實現(xiàn)動畫效果的呢?屬性動畫是通過對目標對象的進行賦值并修改其屬性來實現(xiàn)的。例如修改目標對象的Alpha屬性值,可以實現(xiàn)透明度的變化;修改目標對象的BackgroundColor屬性值可以實現(xiàn)背景色的變化。5.2.3知識準備屬性動畫簡介透明度動畫的實現(xiàn)旋轉(zhuǎn)動畫的實現(xiàn)縮放動畫的實現(xiàn)平移動畫的實現(xiàn)5.2.4實現(xiàn)蘋果的透明度、旋轉(zhuǎn)、縮放和平移動畫。5.2.5知識拓展多個動畫的執(zhí)行順序問題插值器的使用【知識(技能)鞏固練習(xí)】實現(xiàn)時鐘的秒針轉(zhuǎn)動的動畫。【教學(xué)小結(jié)】講授、演示課后作業(yè)與訓(xùn)練完成項目2課后練習(xí)對應(yīng)的習(xí)題。教學(xué)反思
課題項目2任務(wù)3逐幀動畫的實現(xiàn)課型理論課理論課時1課時實踐課時2課時教學(xué)目標知識目標能力(技能)目標理解逐幀動畫的實現(xiàn)原理能夠掌握安卓平臺下逐幀動畫的實現(xiàn)。教學(xué)重點逐幀動畫的實現(xiàn)方法。教學(xué)難點逐幀動畫的實現(xiàn)原理教學(xué)內(nèi)容1.指定圖像的播放順序在drawable文件夾下創(chuàng)建xml文件,在該xml文件中指定圖像的播放順序和播放時長。要求該xml文件的跟節(jié)點是animation-list。每個item子節(jié)點表示一幀。代碼示例如下:<?xmlversion="1.0"encoding="utf-8"?><animation-listxmlns:android="/apk/res/android"><itemandroid:drawable="@drawable/img1"android:duration="100"/><itemandroid:drawable="@drawable/img2"android:duration="100"/></animation-list>以上代碼片段表示,先顯示img1圖像100毫秒,然后顯示img2圖像100毫秒。drawable屬性用來指定圖像資源,duration用來指定顯示此幀的時間(以毫秒為單位)。更多XML屬性見表5-26。表5-26XML屬性屬性名作用android:drawable用來指定drawable資源android:duration指定顯示此幀的時間(以毫秒為單位)android:oneshot默認為false,當設(shè)置為true時,動畫將只運行一次,然后停止。android:variablePadding默認為false,當設(shè)置為true時,則drawable的padding值隨當前選擇的狀態(tài)而改變。android:visible用于設(shè)置drawable的可見性,默認為false。2.AnimationDrawable類 該類用于創(chuàng)建逐幀動畫的對象。通過View對象的getBackground()方法,可以獲得一個AnimationDrawable對象。然后調(diào)用AnimationDrawable的start()方法即可啟動動畫,調(diào)用stop()方法可以在當前幀中停止動畫。其他常用方法的說明見表5-27。表5-27AnimationDrawable類的常見方法方法返回值類型方法名及作用voidaddFrame(Drawableframe,intduration)作用:將幀添加到動畫中。booleanisRunning()作用:指示動畫當前是否正在運行。voidsetOneShot(booleanoneShot)作用:設(shè)置動畫是應(yīng)該播放一次還是重復(fù)播放。參數(shù)設(shè)為true表示只播放一次。voidstart()從第一幀開始播放動畫。voidstop()在當前幀中停止動畫。教學(xué)準備教材,PPT、教綱、教案參考資料/教學(xué)過程方法與手段教學(xué)備注【課堂導(dǎo)入】什么是逐幀動畫?逐幀動畫指的是逐幀繪制幀內(nèi)容的動畫,其實現(xiàn)原理是把事先準備好的若干幅靜態(tài)圖像按照指定的順序進行播放,利用人眼的“視覺暫留”性質(zhì),使用戶產(chǎn)生動畫的錯覺。每幅圖像稱為一幀?!窘虒W(xué)實施】5.3.1任務(wù)描述點擊“播放”按鈕后,能將4幅小狗的圖像按照指定的順序進行播放,形成小狗原地起跳的動畫,同時“播放”二字變成“暫?!?,點擊“暫?!卑粹o后,動畫暫停播放。如圖所示。5.3.2問題引導(dǎo)什么是逐幀動畫?逐幀動畫指的是逐幀繪制幀內(nèi)容的動畫,其實現(xiàn)原理是把事先準備好的若干幅靜態(tài)圖像按照指定的順序進行播放,利用人眼的“視覺暫留”性質(zhì),使用戶產(chǎn)生動畫的錯覺。每幅圖像稱為一幀。5.3.3知識準備指定圖像的播放順序AnimationDrawable類的常用方法5.3.4實現(xiàn)小狗原地起跳的動畫。5.3.5知識拓展介紹通過java代碼定義逐幀動畫的方法【知識(技能)鞏固練習(xí)】利用逐幀動畫制作一個進程加載動畫?!窘虒W(xué)小結(jié)】講授、演示課后作業(yè)與訓(xùn)練完成項目2課后練習(xí)對應(yīng)的習(xí)題。教學(xué)反思
課題項目2任務(wù)4音頻的播放課型理論課理論課時2課時實踐課時2課時教學(xué)目標知識目標能力(技能)目標掌握音頻播放的常用類和方法。能夠控制安卓平臺下音頻的播放。教學(xué)重點掌握播放音頻的方法。教學(xué)難點音頻播放的常用類和方法的靈活使用。教學(xué)內(nèi)容1.MediaPlayer類的常用方法在Android中播放音頻文件一般是通過MediaPlayer類實現(xiàn)的,該類對多種格式的音頻文件提供了非常全面的控制方法,其常用方法見表5-28。表5-28MediaPlayer類的常用方法方法返回值類型方法名及作用voidsetDataSource()作用:設(shè)置播放的音頻文件。voidPrepare()作用:準備音頻文件以便播放。voidprepareAsync()作用:以異步的方式準備音頻文件以便播放。voidstart()作用:開始播放或者繼續(xù)播放音頻。voidpause()作用:暫停播放音頻。voidseekTo()作用:把播放頭移動到指定的時間位置voidstop()作用:停止播放音頻。voidrelease()作用:釋放與MediaPlayer對象相關(guān)的資源。booleanisPlaying作用:判斷音頻是否正確播放。intgetCurrentPosition()作用:獲取當前播放位置。intgetDuration()作用:獲取音頻文件的時長2.MediaPlayer的狀態(tài)圖MediaPlayer具有內(nèi)部狀態(tài),某些操作僅在播放器處于特定狀態(tài)時才有效。如果您在錯誤的狀態(tài)下執(zhí)行某項操作,則系統(tǒng)可能會拋出異常。圖5-5是官方文檔給出的MediaPlayer狀態(tài)圖。圖5-5MediaPlayer狀態(tài)圖該圖說明了哪些方法可將MediaPlayer從一種狀態(tài)變?yōu)榱硪环N狀態(tài)。例如,當您創(chuàng)建新的MediaPlayer時,它處于“Idle”狀態(tài)。此時,您應(yīng)該通過調(diào)用setDataSource()初始化該類,使其處于“Initialized”狀態(tài)。然后,您必須使用prepare()或prepareAsync()方法完成準備工作。當MediaPlayer準備就緒后,它便會進入“Prepared”狀態(tài),這也意味著您可以通過調(diào)用start()使其播放媒體內(nèi)容。此時,如圖5-5所示,您可以通過調(diào)用start()、pause()和seekTo()等方法在“Started”、“Paused”和“PlaybackCompleted”狀態(tài)之間切換。不過請注意,當您調(diào)用stop()時,除非您再次準備MediaPlayer,否則將無法再次調(diào)用start()。3.MediaPlayer的三種數(shù)據(jù)源MediaPlayer可以播放raw文件夾下的音頻文件,也可以播放sd卡中的音頻文件,還可以播放網(wǎng)絡(luò)音頻文件。示例代碼如下://設(shè)置raw文件夾下的音頻文件為數(shù)據(jù)源mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.xxx);//設(shè)置sd卡中的音頻文件為數(shù)據(jù)源mediaPlayer.setDataSource("sd卡中音頻文件的路徑");//設(shè)置網(wǎng)絡(luò)音頻文件為數(shù)據(jù)源mediaPlayer.setDataSource("http://..../xxx.mp3");需要注意的是,如果您使用MediaPlayer播放基于網(wǎng)絡(luò)的內(nèi)容,則您的應(yīng)用必須申請網(wǎng)絡(luò)訪問權(quán)限。<uses-permissionandroid:name="android.permission.INTERNET"/>4.播放音頻文件在設(shè)置完數(shù)據(jù)源后,播放音頻文件前,需要調(diào)用prepare()或者prepareAync()對音頻文件進行解析。prepare()是同步操作,用于解析小文件,prepareAync()是異步操作,用于解析大文件,以便造成UI線程阻塞。示例代碼如下:(1)小音頻文件mediaPlayer.prepare();mediaPlayer.start();//開始播放(2)大音頻文件mediaPlayer.prepareAsync();mediaPlayer.setOnPreparedListener(newMediaPlayer.OnPreparedListener(){@OverridepublicvoidonPrepared(MediaPlayermp){mp.start();//開始播放}});需要注意的是,使用create()方法創(chuàng)建MediaPlayer對象并設(shè)置數(shù)據(jù)源時,不需要調(diào)用prepare()方法,直接調(diào)用start()播放音頻文件即可。教學(xué)準備教材,PPT、教綱、教案參考資料/教學(xué)過程方法與手段教學(xué)備注【課堂導(dǎo)入】音頻的播放是Android開發(fā)中較為常用的功能,Android是如何實現(xiàn)對音頻播放的支持的呢?Android提供的對音頻進行處理的API包是android.media,media中包括了AudioManager、MediaPlayer等類,具有設(shè)置音頻類型,以及控制音頻的播放、暫停、停止等功能。【教學(xué)實施】5.4.1任務(wù)描述本任務(wù)需要實現(xiàn)的功能是:通過Switch開關(guān)按鈕控制背景音樂的播放。當按鈕處于打開狀態(tài)時,能播放音樂,并顯示文字“音樂播放中”,當按鈕處于關(guān)閉狀態(tài)時,能暫停音樂的播放,并顯示文字“音樂暫停播放”,當Activity被銷毀時,停止音樂的播放,并釋放播放器占用的資源。如圖所示。5.4.2問題引導(dǎo)音頻的播放是Android開發(fā)中較為常用的功能,Android是如何實現(xiàn)對音頻播放的支持的呢?Android提供的對音頻進行處理的API包是android.media,media中包括了AudioManager、MediaPlayer等類,具有設(shè)置音頻類型,以及控制音頻的播放、暫停、停止等功能。5.4.3知識準備MediaPlayer類的常用方法MediaPlayer的狀態(tài)圖MediaPlayer的三種數(shù)據(jù)源播放音頻文件5.4.4通過Switch開關(guān)按鈕控制背景音樂的播放。5.4.5知識拓展SoundPool類的常用方法使用SoundPool播放音頻的過程加載音頻文件播放音頻【知識(技能)鞏固練習(xí)】制作一個音頻播放器,能實現(xiàn)暫停和播放功能?!窘虒W(xué)小結(jié)】講授、演示課后作業(yè)與訓(xùn)練完成項目2課后練習(xí)對應(yīng)的習(xí)題。教學(xué)反思
課題項目2任務(wù)5視頻的播放課型理論課理論課時1課時實踐課時2課時教學(xué)目標知識目標能力(技能)目標掌握視頻播放的常用類和方法。能夠控制安卓平臺下視頻的播放。教學(xué)重點掌握播放視頻的方法。教學(xué)難點視頻播放的常用類和方法的靈活使用。教學(xué)內(nèi)容1.SurfaceView簡介SurfaceView把視頻解析成的一幀一幀的圖像,并把這些圖像顯示出來。如果把這些工作放在一個線程中完成,會導(dǎo)致畫面不流暢或者視頻不同步的情況發(fā)生。SurfaceView通過雙緩沖機制解決這個問題,即通過兩個線程循環(huán)交替地解析某一幀圖像和顯示圖像,前端緩沖區(qū)是正在渲染的圖形緩沖區(qū),而后端緩沖區(qū)是接下來要渲染的圖形緩沖區(qū)。當我們要播放某一幀時,它已經(jīng)提前幫我們加載好后面一幀了,所以播放起視頻很流暢。2.Surface簡介Surface是由屏幕顯示內(nèi)容合成器(screencompositor)所管理的原生緩沖器的句柄。即通過Surface可以獲得原生緩沖器以及其中的內(nèi)容。原生緩沖器(rawbuffer)是用來保存當前窗口的像素數(shù)據(jù)的。Surface中的Canvas成員能用于畫圖形或圖像。Surface用通過SurfaceView展示其中的內(nèi)容。3.SurfaceHolder簡介SurfaceHolder是一個接口,用于維護和管理SurfaceView背后的Surface。SurfaceHolder通過三個回調(diào)方法,讓我們可以監(jiān)聽到Surface的創(chuàng)建、銷毀或者改變。在SurfaceView中有一個方法getHolder(),可以很方便地獲得SurfaceView背后的Surface所對應(yīng)的SurfaceHolder。//監(jiān)聽Surface在創(chuàng)建、銷毀、改變時的狀態(tài)surfaceView.getHolder().addCallback(newSurfaceHolder.Callback(){//當Surface創(chuàng)建時調(diào)用@OverridepublicvoidsurfaceCreated(SurfaceHoldersurfaceHolder){}//當surface發(fā)生結(jié)構(gòu)性變化時(格式或者大?。〡OverridepublicvoidsurfaceChanged(SurfaceHoldersurfaceHolder,inti,inti1,inti2){}//當Surface銷毀時調(diào)用@OverridepublicvoidsurfaceDestroyed(SurfaceHoldersurfaceHolder){}});教學(xué)準備教材,PPT、教綱、教案參考資料/教學(xué)過程方法與手段教學(xué)備注【課堂導(dǎo)入】Android是如何實現(xiàn)對視頻播放的支持的呢?與音頻播放相比,視頻的播放需要將影像展示出來。在Android系統(tǒng)中,MediaPlayer不僅可以播放音頻,還可以與SurfaceView相配合播放視頻,SurfaceView主要負責(zé)顯示MediaPlayer中解析得到的視頻圖像?!窘虒W(xué)實施】5.5.1任務(wù)描述本任務(wù)需要實現(xiàn)的功能是:通過MediaPlayer和SurfaceView實現(xiàn)視頻的播放。左邊的按鈕實現(xiàn)繼續(xù)播放和暫停播放功能的切換,右邊的按鈕實現(xiàn)重播的功能。當Activity最小化后再重新顯示時,視頻能從最小化前的位置開始播放。當Activity被銷毀時,停止視頻的播放,并釋放播放器占用的資源。界面效果如圖所示。5.5.2問題引導(dǎo)Android是如何實現(xiàn)對視頻播放的支持的呢?與音頻播放相比,視頻的播放需要將影像展示出來。在Android系統(tǒng)中,MediaPlayer不僅可以播放音頻,還可以與SurfaceView相配合播放視頻,SurfaceView主要負責(zé)顯示MediaPlayer中解析得到的視頻圖像。5.5.3知識準備SurfaceView簡介Surface簡介SurfaceHolder簡介5.5.4實現(xiàn)視頻的播放、暫停播放、繼續(xù)播放和重播。5.5.5知識拓展介紹在Android系統(tǒng)中使用VideoView控件播放視頻的方法?!局R(技能)鞏固練習(xí)】使用同一個按鈕實現(xiàn)視頻的播放和暫停?!窘虒W(xué)小結(jié)】講授、演示課后作業(yè)與訓(xùn)練完成項目2課后練習(xí)對應(yīng)的習(xí)題。教學(xué)反思課題項目2任務(wù)6相機和相冊的使用課型理論課理論課時1課時實踐課時1課時教學(xué)目標知識目標能力(技能)目標掌握使用系統(tǒng)內(nèi)置Activity實現(xiàn)拍照和讀取相冊的方法。能夠控制安卓系統(tǒng)相機和相冊。教學(xué)重點掌握控制安卓系統(tǒng)相機和相冊的方法。教學(xué)難點調(diào)用系統(tǒng)內(nèi)置拍照出錯解決方法。教學(xué)內(nèi)容1.在AndroidManifest.xml文件的manifest節(jié)點中聲明使用相機的權(quán)限和外部存儲設(shè)備的存取權(quán)限。<uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>2.動態(tài)申請權(quán)限拍照需要申請使用相機的權(quán)限"android.permission.CAMERA",存取圖片需要申請讀外部存儲設(shè)備的權(quán)限“android.permission.READ_EXTERNAL_STORAGE”和寫外部存儲設(shè)備的權(quán)限“android.permission.WRITE_EXTERNAL_STORAGE”。首先在AndroidManifest.xml文件中的manifest節(jié)點聲明權(quán)限,代碼如下:<uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>在Android6.0以后開始,對于部分敏感的“危險”權(quán)限,需要在應(yīng)用運行時向用戶申請,只有用戶允許的情況下這個權(quán)限才會被授予給應(yīng)用。因此,接下來還需要在代碼中動態(tài)申請權(quán)限。分為兩個步驟,一是使用ContextCompat的checkSelfPermission()檢測相關(guān)權(quán)限是否被用戶許可了,如果沒有許可,則調(diào)用ActivityCompat的requestPermissions()請求用戶授權(quán);二是通過對onRequestPermissionsResult()方法的回調(diào)判斷用戶是否同意授權(quán),如果結(jié)果是PackageManager.PERMISSION_GRANTED則表示用戶同意授權(quán),如果結(jié)果是PackageManager.PERMISSION_DENIED則表示用戶不同意授權(quán)。示例代碼如下://檢測相機權(quán)限if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED){//如果未授權(quán)時,則請求用戶授權(quán)ActivityCompat.requestPermissions(MainActivity.this,newString[]{Manifest.permission.CAMERA},PERMISSIONS_REQUEST);}else{//如果已經(jīng)授權(quán),在此處編寫相應(yīng)的功能代碼}//用戶對授權(quán)請求做出反饋后,回調(diào)該方法@OverridepublicvoidonRequestPermissionsResult(intrequestCode,Stringpermissions[],int[]grantResults){switch(requestCode){casePERMISSIONS_REQUEST:if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){//如果用戶同意授權(quán)了,在此處編寫相應(yīng)的功能代碼}else{//如果用戶不同意授權(quán),則在此處編寫相應(yīng)的功能代碼}}}3.使用攝像頭拍照調(diào)用系統(tǒng)拍照程序可以非常方便地實現(xiàn)使用攝像頭拍照的功能。具體做法是,創(chuàng)建一個動作為MediaStore.ACTION_IMAGE_CAPTURE的Intent對象,調(diào)用Intent的putExtra()方法指定照片輸出路徑,執(zhí)行startActivityForResult()方法啟動系統(tǒng)自帶的拍照程序,即可使用攝像頭進行拍照。代碼如下:IntentintentCapture=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);intentCapture.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(picFile));//1startActivityForResult(intentCapture,REQUEST_CAMERA);需要注意的是,以上代碼的注釋1處的含義是,將用于保存照片的文件picFile的URI通過Intent對象傳遞給系統(tǒng)的拍照程序,這就意味著將文件URI暴露給了另一個Activity,如果不做處理,程序運行時將會報出如下錯誤:android.os.FileUriExposedException:file:///storage/emulated/0/Pictures/***.jpgexposedbeyondappthroughClipData.Item.getUri()解決該錯誤的辦法是,在onCreate()方法中,調(diào)用StrictMode.VmPolicy.Builder的detectFileUriExposure()方法檢測文件URI暴露信息。代碼如下:StrictMode.VmPolicy.Builderbuilder=newStrictMode.VmPolicy.Builder();StrictMode.setVmPolicy(builder.build());builder.detectFileUriExposure
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年碳中和技術(shù)改造項目可行性研究報告
- 2025年電子競技培訓(xùn)中心項目可行性研究報告
- 2025年區(qū)域性慢病管理平臺建設(shè)項目可行性研究報告
- 萬科預(yù)定協(xié)議書
- 主動被殺協(xié)議書
- 2025年智能監(jiān)控設(shè)備研發(fā)與應(yīng)用項目可行性研究報告
- 社會工作者入職考核要點全解
- 心理醫(yī)生面試題及答案參考
- 媒體行業(yè)編輯記者招聘面試題集
- 景觀設(shè)計師招聘面試題及作品集準備含答案
- 2025天津大學(xué)招聘15人備考考試試題及答案解析
- 2025年山西大地環(huán)境投資控股有限公司社會招聘116人備考題庫有答案詳解
- 2026元旦主題晚會倒計時快閃
- 物理試卷答案浙江省9+1高中聯(lián)盟2025學(xué)年第一學(xué)期高三年級期中考試(11.19-11.21)
- 2025年交管12123學(xué)法減分考試題附含答案
- 俄語口語課件
- 靈芝孢子油課件
- 電力工程檢驗批質(zhì)量驗收記錄【完整版】
- 五年制診斷學(xué)水腫血尿等
- 建筑結(jié)構(gòu)鑒定和加固技術(shù)講義
- 錐栗栽培技術(shù)(共享)
評論
0/150
提交評論