AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第八章 多媒體編程_第1頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第八章 多媒體編程_第2頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第八章 多媒體編程_第3頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第八章 多媒體編程_第4頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第八章 多媒體編程_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第八章多媒體編程安卓·入門與開發(fā)目錄8.1 動(dòng)畫8.2 音頻與視頻8.3 商品詳情頁面的背景音樂在應(yīng)用Android進(jìn)行項(xiàng)目開發(fā)時(shí),特別是在進(jìn)行游戲開發(fā)時(shí),經(jīng)常需要涉及動(dòng)畫。Android中的動(dòng)畫通??梢苑譃檠a(bǔ)間動(dòng)畫和逐幀動(dòng)畫兩種。下面將分別介紹如何實(shí)現(xiàn)這兩種功能。8.1動(dòng)畫8.1動(dòng)畫目錄8.1 動(dòng)畫8.1.1 TweenAnimation補(bǔ)間動(dòng)畫8.1.2 FrameAnimation逐幀動(dòng)畫8.1.1TweenAnimation補(bǔ)間動(dòng)畫 Tween動(dòng)畫,通過對View的內(nèi)容進(jìn)行一系列的圖形變換(包括平移、縮放、旋轉(zhuǎn)、改變透明度)來實(shí)現(xiàn)動(dòng)畫效果,如表8.1所示。動(dòng)畫效果的定義可以采用XML來做也可以采用編碼來做。表8.1動(dòng)畫類型表動(dòng)畫類型XML配置方式Java代碼實(shí)現(xiàn)方式漸變透明度動(dòng)畫效果<alpha/>AlphaAnimation漸變尺寸縮放動(dòng)畫效果<scale/>ScaleAnimation畫面旋轉(zhuǎn)動(dòng)畫效果<rotate/>RotateAnimation畫面位置移動(dòng)動(dòng)畫效果<translate/>TranslateAnimation組合動(dòng)畫效果<set/>AnimationSet8.1動(dòng)畫1.)alpha漸變透明度動(dòng)畫效果XML布局如下:alpha漸變透明度動(dòng)畫效果表如表8.2所示。<?xmlversion="1.0"encoding="utf-8"?><alphaxmlns:android="/apk/res/android"android:duration="500"android:fillAfter="false"android:fromAlpha="1.0"android:toAlpha="0.0"/>屬性描述fromAlpha開始時(shí)透明度toAlpha開始時(shí)透明度fillAfter結(jié)束時(shí)透明度fromAlpha動(dòng)畫持續(xù)時(shí)間duration設(shè)置動(dòng)畫結(jié)束后保持當(dāng)前的位置XML方式加載方式通過AnimationUtils.loadAnimation(this,R.anim.anim_alpha)獲取Animation。AnimationalphaAnimation=AnimationUtils.loadAnimation(this,R.anim.anim_alpha);imageView.startAnimation(alphaAnimation);8.1動(dòng)畫<?xmlversion="1.0"encoding="utf-8"?><scalexmlns:android="/apk/res/android"android:duration="500"android:fromXScale="0.0"android:fromYScale="0.0"android:interpolator="@android:anim/decelerate_interpolator"android:pivotX="50%"android:pivotY="50%"android:repeatCount="1"android:repeatMode="reverse"android:startOffset="0"android:toXScale="1.5"android:toYScale="1.5"/>scale漸變透明度動(dòng)畫效果表如表8.3所示。屬性描述fromXDelta,fromYDelta起始時(shí)X,Y座標(biāo),屏幕右下角的座標(biāo)是X:320,Y:480toXDelta,toYDelta動(dòng)畫結(jié)束時(shí)X,Y的座標(biāo)interpolator指定動(dòng)畫插入器fromXScale,fromYScale動(dòng)畫開始前X,Y的縮放,0.0為不顯示,1.0為正常大小toXScale,toYScale動(dòng)畫最終縮放的倍數(shù),1.0為正常大小,大于1.0放大pivotX,pivotY動(dòng)畫起始位置,相對于屏幕的百分比,兩個(gè)都為50%表示動(dòng)畫從自身中間開始startOffset動(dòng)畫多次執(zhí)行的間隔時(shí)間,如果只執(zhí)行一次,執(zhí)行前會(huì)暫停這段時(shí)間,單位毫秒duration一次動(dòng)畫效果消耗的時(shí)間,單位毫秒,值越小動(dòng)畫速度越快repeatCount動(dòng)畫重復(fù)的計(jì)數(shù),動(dòng)畫將會(huì)執(zhí)行該值+1次repeatMode動(dòng)畫重復(fù)的模式,reverse為反向,當(dāng)?shù)谂即螆?zhí)行時(shí),動(dòng)畫方向會(huì)相反。restart為重新執(zhí)行,方向不變

在動(dòng)畫的每個(gè)周期里面做不同的操作,可以借助動(dòng)畫監(jiān)聽器Animation.AnimationListener。alphaAnimation.setAnimationListener(newAnimation.AnimationListener(){@OverridepublicvoidonAnimationStart(Animationanimation){//動(dòng)畫開始時(shí)調(diào)用}@OverridepublicvoidonAnimationEnd(Animationanimation){//動(dòng)畫結(jié)束時(shí)調(diào)用}@OverridepublicvoidonAnimationRepeat(Animationanimation){//動(dòng)畫重復(fù)時(shí)調(diào)用}});2.)scale漸變尺寸縮放動(dòng)畫效果XML布局如下:8.1動(dòng)畫目錄8.1 動(dòng)畫8.1.1 TweenAnimation補(bǔ)間動(dòng)畫8.1.2 FrameAnimation逐幀動(dòng)畫8.1.2FrameAnimation逐幀動(dòng)畫逐幀動(dòng)畫(Frame-by-frameAnimations)從字面上理解就是一幀挨著一幀的播放圖片,就像放電影一樣。和補(bǔ)間動(dòng)畫一樣可以通過xml實(shí)現(xiàn)也可以通過java代碼實(shí)現(xiàn)。接下來借助目前項(xiàng)目中的一個(gè)開獎(jiǎng)的動(dòng)畫來總結(jié)如何使用。實(shí)現(xiàn)效果如圖8.1所示:圖8.1開獎(jiǎng)動(dòng)畫動(dòng)畫效果圖8.1動(dòng)畫<?xmlversion="1.0"encoding="utf-8"?><animation-listxmlns:android="/apk/res/android"android:oneshot="false"><itemandroid:drawable="@mipmap/lottery_1"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_2"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_3"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_4"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_5"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_6"android:duration="200"/></animation-list>根節(jié)點(diǎn)是animation-list(動(dòng)畫列表),里面有一個(gè)或者多個(gè)item節(jié)點(diǎn)組成,oneshot屬性表示是否只播放一次,true表示只會(huì)播放一次,false表示一直循環(huán)播放,內(nèi)部用item節(jié)點(diǎn)聲明一個(gè)動(dòng)畫幀,android:drawable指定此幀動(dòng)畫所對應(yīng)的圖片資源,android:druation代表此幀持續(xù)的時(shí)間,整數(shù),單位為毫秒。8.1動(dòng)畫1、在res/drawable目錄下新建一個(gè)文件lottery_animlist.xml,內(nèi)容如下:<ImageViewandroid:id="@+id/animation_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_margin="10dp"android:src="@drawable/lottery_animlist"/>這個(gè)時(shí)候運(yùn)行一下,發(fā)現(xiàn)動(dòng)畫沒有運(yùn)行而是停留在第一幀,那是因?yàn)锳nimationDrawable播放動(dòng)畫是依附在window上面的,而在ActivityonCreate方法中調(diào)用時(shí)Window還未初始化完畢,所有才會(huì)停留在第一幀,要想實(shí)現(xiàn)播放必須在onWindowFocusChanged中添加如下代碼:imageView.setImageResource(R.drawable.lottery_animlist);AnimationDrawableanimationDrawable=(AnimationDrawable)imageView.getDrawable();animationDrawable.start();如果想要停止播放動(dòng)畫可以調(diào)用AnimationDrawable的stop方法。imageView.setImageResource(R.drawable.lottery_animlist);AnimationDrawableanimationDrawable=(AnimationDrawable)imageView.getDrawable();animationDrawable.stop();2、用ImageView控件作為動(dòng)畫載體來顯示動(dòng)畫8.1動(dòng)畫3、純Java代碼實(shí)現(xiàn)方式AnimationDrawableanim=newAnimationDrawable();for(inti=1;i<=6;i++){intid=getResources().getIdentifier("lottery_"+i,"mipmap",getPackageName());Drawabledrawable=getResources().getDrawable(id);anim.addFrame(drawable,200);}anim.setOneShot(false);imageView.setImageDrawable(anim);anim.start();8.1動(dòng)畫4、AnimationDrawable

幾個(gè)常見的APIAnimationDrawable幾個(gè)常見的API如表8.4所示表8.4AnimationDrawable常見API表方法描述voidstart()開始播放動(dòng)畫voidstop()停止播放動(dòng)畫addFrame(Drawableframe,intduration)添加一幀,并設(shè)置該幀顯示的持續(xù)時(shí)間。voidsetOneShoe(booleanflag)false為循環(huán)播放,true為僅播放一次booleanisRunning()是否正在播放FrameAnimation(逐幀動(dòng)畫)相對來說比較簡單,但是在實(shí)際開發(fā)中使用的頻率還是比較高的,希望通過這個(gè)小例子能夠掌握逐幀動(dòng)畫。由于逐幀動(dòng)畫只能實(shí)現(xiàn)比較小的動(dòng)畫效果,如果復(fù)雜而且?guī)瑪?shù)比較多,則不太建議使用逐幀動(dòng)畫。如果真是超級復(fù)雜的動(dòng)畫,建議選擇雙緩沖繪制View來實(shí)現(xiàn)。8.1動(dòng)畫目錄8.1 動(dòng)畫8.2 音頻與視頻8.3 商品詳情頁面的背景音樂8.2音頻與視頻8.2音頻與視頻Android提供了對常用音頻和視頻格式的支持,它所支持的音頻格式有MP3、3GP、Ogg和WAVE等,支持的視頻格式有3GP和MP4等。通過AndroidAPI提供的相關(guān)方法,可以在Android中實(shí)現(xiàn)音頻與視頻的播放。下面將分別介紹播放音頻與視頻的不同方法。目錄8.2 音頻與視頻8.2.1 使用MediaPlayer類播放音頻8.2.2 使用SoundPool類播放視頻8.2.3 使用VideoView組件播放視頻8.2.1使用MediaPlayer類播放音頻MediaPlayer是一個(gè)支持音頻及視頻文件播放的Android類,可播放不同來源(本地或網(wǎng)絡(luò)流媒體)、多種格式(如WAV、MP3、OggVorbis、MPEG-4以及3GPP)的多媒體文件。要想利用MediaPlayer實(shí)現(xiàn)音頻的播放,首先要對MediaPlayer進(jìn)行初始化工作,得到MediaPlayer對象,在通過MediaPlayer進(jìn)行相應(yīng)的操作。參考書上P191-194。8.2音頻與視頻目錄8.2 音頻與視頻8.2.1 使用MediaPlayer類播放音頻8.2.2 使用SoundPool類播放視頻8.2.3 使用VideoView組件播放視頻8.2.2使用SoundPool類播放視頻Android還提供了另一個(gè)播放音頻的類—SoundPool(音頻池),可以同時(shí)播放多個(gè)短小的音頻,而且占用的資源較少。SoundPool主要用于播放一些較短的聲音片段,與MediaPlayer相比,SoundPool的優(yōu)勢在于CPU資源占用量低和反應(yīng)延遲小。另外,SoundPool還支持自行設(shè)置聲音的品質(zhì)、音量、播放比率等參數(shù)。基本方法如下:構(gòu)造器,用于初始化一個(gè)SoundPool,SoundPool(intmaxStreams,intstreamType,intsrcQuality)// ?maxStreams:指定同時(shí)可以播放的音頻流個(gè)數(shù)?streamType:指定聲音的類型,簡單來說,就是播放的時(shí)候,以哪種聲音類型的音量播放。如:STREAM_ALARM,是警報(bào)的聲音類型。?srcQuality:音頻的質(zhì)量,設(shè)置為0代表默認(rèn)。加載音頻,提供不同的加載方式,可以從res/raw中加載,或者是從StringPath中加載,并指定優(yōu)先級。優(yōu)先級越高當(dāng)然越優(yōu)先播放。加載完成后返回一個(gè)資源ID,代表這個(gè)音頻在SoundPool池中的ID。intload(Contextcontext,intresld,intpriority):播放音頻,需要指定加載時(shí)返回的資源ID才能播放。intplay(intsoundID,floatleftVolume,floatrightVolume,intpriority,intloop,floatrate) ?soundID:該方法的第一個(gè)參數(shù)指定播放哪個(gè)聲音,即load后返回的ID?leftVolume、rightVolume:指定左、右的音量?priority:指定播放聲音的優(yōu)先級,數(shù)值越大,優(yōu)先級越高;?loop:指定是否循環(huán),0為不循環(huán),-1為循環(huán);?rate:指定播放的比率,數(shù)值可從0.5到2,1為正常比率。加載完成的回調(diào)。雖然是加載一個(gè)很小的音頻,但還是需要一點(diǎn)時(shí)間。所以,就有這個(gè)回調(diào)。sampleId就是音頻的ID,用于標(biāo)識哪個(gè)音頻,status,加載完成的狀態(tài),0為成功。onLoadComplete(SoundPoolsoundPool,intsampleId,intstatus)8.2音頻與視頻目錄8.2 音頻與視頻8.2.1 使用MediaPlayer類播放音頻8.2.2 使用SoundPool類播放視頻8.2.3 使用VideoView組件播放視頻8.2.3使用VideoView組件播放視頻在Android中提供了VideoView組件用于播放視頻文件,要想使用VideoView組件播放視頻首先要在布局文件中添加該組件,然后在Activity中獲取該組件,并應(yīng)用其setVideoPath方法或setVideoURI方法加載要播放的視頻,最后調(diào)用start方法來播放視頻。另外,VideoView組件還提供了stop()和pasuse方法,分別用于通知和暫停視頻的播放?;臼褂酶袷饺缦拢篤ideoViewmVv=(VideoView)findViewById(R.id.vv);//添加播放控制條,mVv.setMediaController(newMediaController(this));//設(shè)置視頻源播放res/raw中的文件,文件名小寫字母,格式:3gp,mp4等,flv的不一定支持;UrirawUri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.shuai_dan_ge);mVv.setVideoURI(rawUri);//播放在線視頻mVideoUri=Uri.parse("http://****/abc.mp4");mVv.setVideoPath(mVideoUri.toString());mVv.start();mVv.requestFocus();mVv.resume();mVv.setOnPreparedListener(this);mVv.setOnErrorListener(this);mVv.setOnCompletionListener(this);8.2音頻與視頻目錄8.1 動(dòng)畫8.2 音頻與視頻8.3 商品詳情頁面的背景音樂使用Activity類中的getPreferences方法獲取如果Activity僅需要一個(gè)SharedPreferences文件,則可以使用getPreferences方法獲取。因?yàn)橹挥幸粋€(gè)文件,所以不需要提供名稱。該方法的語法格式如下:getPreferences(intmode)其中,參數(shù)mode的取值同getSharedPreferences方法相同。本章學(xué)習(xí)了用MediaPlayer播放音頻,這里介紹如何用MediaPlayer類給商品詳情頁面添加背景音樂。本章代碼會(huì)涉及到Service服務(wù),因?yàn)镾ervice是能夠在后臺(tái)長時(shí)間運(yùn)行,并且不提供用戶界面的應(yīng)用程序組件。其他應(yīng)用程序組件能啟動(dòng)Service,并且切換到另一個(gè)應(yīng)用程序時(shí),Service還可以在后臺(tái)運(yùn)行。如果要關(guān)閉Service和背景音樂,可以重寫onBackPressed方法,監(jiān)聽返回按鍵,按下則關(guān)閉服務(wù)。8.3商品詳情頁面的背景音樂8.3商品詳情頁面的背景音樂使用Activity類中的getPreferences方法獲取如果Activity僅需要一個(gè)SharedPreferences文件,則可以使用getPreferences方法獲取。因?yàn)橹挥幸粋€(gè)文件,所以不需要提供名稱。該方法的語法格式如下:getPreferences(intmode)其中,參數(shù)mode的取值同getSharedPreferences方法相同。1、在項(xiàng)目名上單擊鼠標(biāo)右鍵,在彈出快捷菜單上,選擇新建service包,用于存放service。如圖8.2所示。8.3商品詳情頁面的背景音樂圖8.2新建service包圖8.3商品詳情頁面的背景音樂使用Activity類中的getPreferences方法獲取如果Activity僅需要一個(gè)SharedPreferences文件,則可以使用getPreferences方法獲取。因?yàn)橹挥幸粋€(gè)文件,所以不需要提供名稱。該方法的語法格式如下:getPreferences(intmode)其中,參數(shù)mode的取值同getSharedPreferences方法相同。2、在AndroidManifest.xml文件中的<Application>標(biāo)簽內(nèi)加入下面的語句。8.3商品詳情頁面的背景音樂<serviceandroid:name="com.mingrisoft.mrshop.service.MusicServer"><intent-filter><actionandroid:name="com.angel.Android.MUSIC"/><categoryandroid:name="ent.category.default"/></intent-filter></service>8.3商品詳情頁面的背景音樂使用Activity類中的getPreferences方法獲取如果Activity僅需要一個(gè)SharedPreferences文件,則可以使用getPreferences方法獲取。因?yàn)橹挥幸粋€(gè)文件,所以不需要提供名稱。該方法的語法格式如下:getPreferences(intmode)其中,參數(shù)mode的取值同getSharedPreferences方法相同。3、在service包節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,在彈出快捷菜單上,選擇新建MusicServer.java類,繼承Service。8.3商品詳情頁面的背景音樂4、聲明mediaPlayer,重寫onCreate方法初始化媒體播放器;重寫onStartCommand方法啟動(dòng)播放;重寫onDestroy方法停止播放;具體代碼參考書上197頁-199頁8.3商品詳情頁面的背景音樂使用Activity類中的getPreferences方法獲取如果Activity僅需要一個(gè)SharedPreferences文件,則可以使用getPreferences方法獲取。因?yàn)橹挥幸粋€(gè)文件,所以不需要提供名稱。該方法的語法格式如下:getPreferences(intmode)其中,參數(shù)mode的取值同getSharedPreferences方法相同。5、在商品詳情GoodsDetailsActivity的onCreate()里啟動(dòng)播放;8.3商品詳情頁面的背景音樂Toast.makeText(GoodsDetailsActivity.this,"開始播放背景音樂",Toast.LENGTH_SHORT).show();//播放背景音樂Intentintent=newIntent(GoodsDetailsActivity.thi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論