第三次課件(媒體播放器)_第1頁
第三次課件(媒體播放器)_第2頁
第三次課件(媒體播放器)_第3頁
第三次課件(媒體播放器)_第4頁
第三次課件(媒體播放器)_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Lesson3

媒體播放器第二階段課堂回顧如何讓控件動起來?自定義控件的原理自定義屬性的兩種方法實現(xiàn)音量控件長沙華瑞IT培訓(xùn)學(xué)校多媒體簡介多媒體是計算機(jī)和視頻技術(shù)的結(jié)合,實際上它是兩個媒體:聲音和圖像音頻和視頻的播放,我們都會用到MediaPlayer這個類進(jìn)行播放

長沙華瑞IT培訓(xùn)學(xué)校從源文件中播放1,在項目的res/raw目錄下,放置一個android支持的多媒體文件,如MP3,會在R文件中生成對應(yīng)的索引2,通過MediaPlayer.create(this,R.id.et_mp3)創(chuàng)建一個文件3,使用start播放長沙華瑞IT培訓(xùn)學(xué)校核心代碼mediaplayer=MediaPlayer.create(this,R.raw.music02);

try{ mediaplayer.start(); }catch(IllegalStateExceptione){ e.printStackTrace(); }注:將muisc02.mp3文件放入res/raw的文件夾中長沙華瑞IT培訓(xùn)學(xué)校從文件系統(tǒng)中播放1,實例化一個MediaPlayer2,MediaPlayer.setData方法調(diào)用(輸入文件所在路徑)3,調(diào)用MediaPlayer.prepare進(jìn)行準(zhǔn)備4,調(diào)用start進(jìn)行播放長沙華瑞IT培訓(xùn)學(xué)校核心代碼privatevoidcreateMusicFromPath(Stringpath) { mediaplayer=newMediaPlayer(); try{ mediaplayer.setDataSource(path); mediaplayer.prepare(); mediaplayer.start(); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } }注:將音頻文件放入在手機(jī)的sdcard,輸入路徑即可播放長沙華瑞IT培訓(xùn)學(xué)校播放網(wǎng)絡(luò)音樂1,獲取音樂鏈接地址A,通過地址創(chuàng)建Uri,通過MediaPlayer.create(this,uri)創(chuàng)建,獲取player對象B,new出MediaPlayer對象,通過MediaPlayer.setData(webPath)創(chuàng)建player對象,然后調(diào)用prepare();2,調(diào)用start方法進(jìn)行播放長沙華瑞IT培訓(xùn)學(xué)校音樂播放器長沙華瑞IT培訓(xùn)學(xué)校多媒體狀態(tài)長沙華瑞IT培訓(xùn)學(xué)校使用SeekBar實現(xiàn)控制播放位置功能1,在視圖xml中拖入SeekBar控件2,設(shè)置seekBar.setMax(mediaPlayer.getDuration())為媒體的最大長度3,實現(xiàn)控件的OnSeekBarChangeListener接口4,實現(xiàn)onProgressChanged(//當(dāng)進(jìn)度狀態(tài)發(fā)生變化時候SeekBarseekBar,intprogress,//當(dāng)前的進(jìn)度booleanfromUser)//是否由用戶操作導(dǎo)致publicvoidonProgressChanged(SeekBararg0,intprogress,booleanisFromUser){

if(isFromUser)

{

mediaPlayer.seekTo(progress);

}}長沙華瑞IT培訓(xùn)學(xué)校實現(xiàn)進(jìn)度條SeekBar自動移動效果//1,創(chuàng)建一個線程Runnablerun=newRunnable(){ publicvoidrun(){ //TODOAuto-generatedmethodstub //獲取當(dāng)前播放音樂的位置 if(mediaPlayer!=null) { intcurrent=mediaPlayer.getCurrentPosition(); progressBar.setProgress(current); if(mediaPlayer.isPlaying()) { progressHandler.postDelayed(run,100); } } }};//2,創(chuàng)建一個handler用于控制線程HandlerprogressHandler=newHandler();progressHandler.post(run);//啟動線程progressHandler.postDelayed(run,100);//延時啟動線程progressHandler.removeCallbacks(run);//刪除指定的Runnable對象,使線程對象停止運行。長沙華瑞IT培訓(xùn)學(xué)校停止,暫停,重播功能實現(xiàn)A,停止1,首先判斷是否是playing調(diào)用player的stop方法2,同時要將還沒有執(zhí)行的線程從handler中移除progressHandler.removeCallbacks(run);3,將進(jìn)度條的seekbar的進(jìn)度設(shè)置為0B,暫停1,利用一個boolean變量判斷是否是pause狀態(tài)2,判斷playing,調(diào)用play的pause方法,并且removeCallbacks3,如果是pause狀態(tài),則執(zhí)行start,并且執(zhí)行progressHandler.post方法C,重播1,mediaPlayer.seekTo(0),2,progressBar.setProgress(0);長沙華瑞IT培訓(xùn)學(xué)校實現(xiàn)進(jìn)度條SeekBar緩存條效果//設(shè)置緩存更新事件mediaPlayer.setOnBufferingUpdateListener(newOnBufferingUpdateListener(){//實現(xiàn)更新方法

publicvoidonBufferingUpdate(MediaPlayerarg0,intarg1){

//在每次更新之后,設(shè)置緩存條的進(jìn)度 progressBar.setSecondaryProgress(arg1*progressBar.getMax()/100);} });長沙華瑞IT培訓(xùn)學(xué)校MediaPlayer的狀態(tài)A,停止1,首先判斷是否是playing調(diào)用player的stop方法2,同時要將還沒有執(zhí)行的線程從handler中移除progressHandler.removeCallbacks(run);3,將進(jìn)度條的seekbar的進(jìn)度設(shè)置為0B,暫停1,利用一個boolean變量判斷是否是pause狀態(tài)2,判斷playing,調(diào)用play的pause方法,并且removeCallbacks3,如果是pause狀態(tài),則執(zhí)行start,并且執(zhí)行progressHandler.post方法C,重播1,mediaPlayer.seekTo(0),2,progressBar.setProgress(0);長沙華瑞IT培訓(xùn)學(xué)校核心代碼mediaPlayer.reset();//重置為idle狀態(tài)mediaPlayer.setDataSource(file.getAbsolutePath());//設(shè)置播放的文件mediaPlayer.prepare();//緩沖mediaPlayer.setOnPreparedListener(newMyPreparedListener());//設(shè)置緩沖完成監(jiān)聽mediaPlayer.pause();//暫停mediaPlayer.start();//播放音樂mediaPlayer.stop();();//停止mediaPlayer.seekTo(progress);//設(shè)置播放進(jìn)度mediaPlayer.release();//釋放關(guān)聯(lián)的資源progressHandler.postDelayed(run,100);//定時調(diào)用Runnable對象progressHandler.post(run);//將Runnable對象發(fā)送到消息隊列中progressHandler.removeCallbacks(run);//將run從消息隊列中移除長沙華瑞IT培訓(xùn)學(xué)校視頻播放器SurfaceView控件長沙華瑞IT培訓(xùn)學(xué)校SurfaceView控件SurfaceView可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù),是個非常重要的繪圖容器SurfaceHolder用來操縱surface,處理它在Canvas上畫的效果和動畫,控制表面,大小,像素等長沙華瑞IT培訓(xùn)學(xué)校核心代碼SurfaceHoldersurfaceHolder=surfaceView.getHolder();//surfaceView的控制對象surfaceHolder.setFixedSize(176,144);//設(shè)置分辨率surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//不使用surfaceview自身的緩沖機(jī)制,把得到的數(shù)據(jù)直接輸出surfaceHolder.setKeepScreenOn(true);//保持屏幕的亮度//在播放前設(shè)置顯示畫面mediaPlayer.setDisplay(surfaceView.getHolder());長沙華瑞IT培訓(xùn)學(xué)校VideoView的使用//獲取VideoView對象videoView=(VideoView)this.findViewById(R.id.videoView);//創(chuàng)建播放視頻的URIUriuri=Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/video.mp4");//設(shè)置URIvideoView.setVideoURI(uri);//uri//設(shè)置多媒體控制器videoView.setMediaController(newMediaController(this));videoView.start();長沙華瑞IT培訓(xùn)學(xué)校SoundPool

android中可以用mediaplayer播放音樂,使用soundpool可以播一些短的反應(yīng)速度要求高的聲音,比如點擊時候的音效//1,創(chuàng)建SoundPoolsoundPool=newSoundPool(3,//同時播放的流的最大數(shù)量AudioManager.STREAM_MUSIC,//流的類型,一般為STREAM_MUSIC0);//采樣率轉(zhuǎn)化質(zhì)量,當(dāng)前無效果,使用0作為默認(rèn)值//2,載入音效intid=load(Contextcontext,intresId,intpriority)//從APK資源載入

//3,通過id播放音效soundPool.play(soundM

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論