




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Lesson3
媒體播放器第二階段課堂回顧如何讓控件動(dòng)起來(lái)?自定義控件的原理自定義屬性的兩種方法實(shí)現(xiàn)音量控件長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校多媒體簡(jiǎn)介多媒體是計(jì)算機(jī)和視頻技術(shù)的結(jié)合,實(shí)際上它是兩個(gè)媒體:聲音和圖像音頻和視頻的播放,我們都會(huì)用到MediaPlayer這個(gè)類(lèi)進(jìn)行播放
長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校從源文件中播放1,在項(xiàng)目的res/raw目錄下,放置一個(gè)android支持的多媒體文件,如MP3,會(huì)在R文件中生成對(duì)應(yīng)的索引2,通過(guò)MediaPlayer.create(this,R.id.et_mp3)創(chuàng)建一個(gè)文件3,使用start播放長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校核心代碼mediaplayer=MediaPlayer.create(this,R.raw.music02);
try{ mediaplayer.start(); }catch(IllegalStateExceptione){ e.printStackTrace(); }注:將muisc02.mp3文件放入res/raw的文件夾中長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校從文件系統(tǒng)中播放1,實(shí)例化一個(gè)MediaPlayer2,MediaPlayer.setData方法調(diào)用(輸入文件所在路徑)3,調(diào)用MediaPlayer.prepare進(jìn)行準(zhǔn)備4,調(diào)用start進(jìn)行播放長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校核心代碼privatevoidcreateMusicFromPath(Stringpath) { mediaplayer=newMediaPlayer(); try{ mediaplayer.setDataSource(path); mediaplayer.prepare(); mediaplayer.start(); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } }注:將音頻文件放入在手機(jī)的sdcard,輸入路徑即可播放長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校播放網(wǎng)絡(luò)音樂(lè)1,獲取音樂(lè)鏈接地址A,通過(guò)地址創(chuàng)建Uri,通過(guò)MediaPlayer.create(this,uri)創(chuàng)建,獲取player對(duì)象B,new出MediaPlayer對(duì)象,通過(guò)MediaPlayer.setData(webPath)創(chuàng)建player對(duì)象,然后調(diào)用prepare();2,調(diào)用start方法進(jìn)行播放長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校音樂(lè)播放器長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校多媒體狀態(tài)長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校使用SeekBar實(shí)現(xiàn)控制播放位置功能1,在視圖xml中拖入SeekBar控件2,設(shè)置seekBar.setMax(mediaPlayer.getDuration())為媒體的最大長(zhǎng)度3,實(shí)現(xiàn)控件的OnSeekBarChangeListener接口4,實(shí)現(xiàn)onProgressChanged(//當(dāng)進(jìn)度狀態(tài)發(fā)生變化時(shí)候SeekBarseekBar,intprogress,//當(dāng)前的進(jìn)度booleanfromUser)//是否由用戶(hù)操作導(dǎo)致publicvoidonProgressChanged(SeekBararg0,intprogress,booleanisFromUser){
if(isFromUser)
{
mediaPlayer.seekTo(progress);
}}長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校實(shí)現(xiàn)進(jìn)度條SeekBar自動(dòng)移動(dòng)效果//1,創(chuàng)建一個(gè)線(xiàn)程Runnablerun=newRunnable(){ publicvoidrun(){ //TODOAuto-generatedmethodstub //獲取當(dāng)前播放音樂(lè)的位置 if(mediaPlayer!=null) { intcurrent=mediaPlayer.getCurrentPosition(); progressBar.setProgress(current); if(mediaPlayer.isPlaying()) { progressHandler.postDelayed(run,100); } } }};//2,創(chuàng)建一個(gè)handler用于控制線(xiàn)程HandlerprogressHandler=newHandler();progressHandler.post(run);//啟動(dòng)線(xiàn)程progressHandler.postDelayed(run,100);//延時(shí)啟動(dòng)線(xiàn)程progressHandler.removeCallbacks(run);//刪除指定的Runnable對(duì)象,使線(xiàn)程對(duì)象停止運(yùn)行。長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校停止,暫停,重播功能實(shí)現(xiàn)A,停止1,首先判斷是否是playing調(diào)用player的stop方法2,同時(shí)要將還沒(méi)有執(zhí)行的線(xiàn)程從handler中移除progressHandler.removeCallbacks(run);3,將進(jìn)度條的seekbar的進(jìn)度設(shè)置為0B,暫停1,利用一個(gè)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);長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校實(shí)現(xiàn)進(jìn)度條SeekBar緩存條效果//設(shè)置緩存更新事件mediaPlayer.setOnBufferingUpdateListener(newOnBufferingUpdateListener(){//實(shí)現(xiàn)更新方法
publicvoidonBufferingUpdate(MediaPlayerarg0,intarg1){
//在每次更新之后,設(shè)置緩存條的進(jìn)度 progressBar.setSecondaryProgress(arg1*progressBar.getMax()/100);} });長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校MediaPlayer的狀態(tài)A,停止1,首先判斷是否是playing調(diào)用player的stop方法2,同時(shí)要將還沒(méi)有執(zhí)行的線(xiàn)程從handler中移除progressHandler.removeCallbacks(run);3,將進(jìn)度條的seekbar的進(jìn)度設(shè)置為0B,暫停1,利用一個(gè)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);長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校核心代碼mediaPlayer.reset();//重置為idle狀態(tài)mediaPlayer.setDataSource(file.getAbsolutePath());//設(shè)置播放的文件mediaPlayer.prepare();//緩沖mediaPlayer.setOnPreparedListener(newMyPreparedListener());//設(shè)置緩沖完成監(jiān)聽(tīng)mediaPlayer.pause();//暫停mediaPlayer.start();//播放音樂(lè)mediaPlayer.stop();();//停止mediaPlayer.seekTo(progress);//設(shè)置播放進(jìn)度mediaPlayer.release();//釋放關(guān)聯(lián)的資源progressHandler.postDelayed(run,100);//定時(shí)調(diào)用Runnable對(duì)象progressHandler.post(run);//將Runnable對(duì)象發(fā)送到消息隊(duì)列中progressHandler.removeCallbacks(run);//將run從消息隊(duì)列中移除長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校視頻播放器SurfaceView控件長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校SurfaceView控件SurfaceView可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù),是個(gè)非常重要的繪圖容器SurfaceHolder用來(lái)操縱surface,處理它在Canvas上畫(huà)的效果和動(dòng)畫(huà),控制表面,大小,像素等長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校核心代碼SurfaceHoldersurfaceHolder=surfaceView.getHolder();//surfaceView的控制對(duì)象surfaceHolder.setFixedSize(176,144);//設(shè)置分辨率surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//不使用surfaceview自身的緩沖機(jī)制,把得到的數(shù)據(jù)直接輸出surfaceHolder.setKeepScreenOn(true);//保持屏幕的亮度//在播放前設(shè)置顯示畫(huà)面mediaPlayer.setDisplay(surfaceView.getHolder());長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校VideoView的使用//獲取VideoView對(duì)象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();長(zhǎng)沙華瑞IT培訓(xùn)學(xué)校SoundPool
android中可以用mediaplayer播放音樂(lè),使用soundpool可以播一些短的反應(yīng)速度要求高的聲音,比如點(diǎn)擊時(shí)候的音效//1,創(chuàng)建SoundPoolsoundPool=newSoundPool(3,//同時(shí)播放的流的最大數(shù)量AudioManager.STREAM_MUSIC,//流的類(lèi)型,一般為STREAM_MUSIC0);//采樣率轉(zhuǎn)化質(zhì)量,當(dāng)前無(wú)效果,使用0作為默認(rèn)值//2,載入音效intid=load(Contextcontext,intresId,intpriority)//從APK資源載入
//3,通過(guò)id播放音效soundPool.play(soundM
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工培訓(xùn)計(jì)劃與資源模板
- 多項(xiàng)目管理統(tǒng)籌的標(biāo)準(zhǔn)化流程
- 2025內(nèi)蒙古鄂溫克族自治旗融媒體中心多元化崗位招聘2人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(新)
- 改編音樂(lè)的考試題及答案
- 醫(yī)師衛(wèi)生職稱(chēng)考試試題及答案
- 2025福建省市場(chǎng)監(jiān)督管理局直屬事業(yè)單位招聘高層次人才20人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(典優(yōu))
- 2025年北京高教崗前培訓(xùn)考試題及參考答案
- 2025年保育員鑒定題庫(kù)及答案
- 守秘義務(wù)與信息安全保障保證承諾書(shū)9篇
- 項(xiàng)目成本分析與控制工具包
- 孕產(chǎn)婦全程保健指南
- 航空理論教學(xué)課件
- 【MOOC答案】《VLSI設(shè)計(jì)基礎(chǔ)(數(shù)字集成電路設(shè)計(jì)基礎(chǔ))》(東南大學(xué))章節(jié)作業(yè)慕課答案
- 中國(guó)兒童食管狹窄診治專(zhuān)家共識(shí)解讀 2
- 注塑質(zhì)量管理辦法
- 數(shù)字治理培訓(xùn)課件
- 軍品配套項(xiàng)目管理辦法
- TCSF00782023森林草原消防無(wú)人機(jī)巡護(hù)作業(yè)技術(shù)規(guī)程
- DB62∕T 4964-2024 地質(zhì)災(zāi)害精細(xì)調(diào)查技術(shù)規(guī)范
- 2025年七一黨課-作風(fēng)建設(shè)永遠(yuǎn)在路上學(xué)習(xí)教育黨課
- 2025年《互聯(lián)網(wǎng)銷(xiāo)售》課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論