《2019年四年級信息技術(shù)上冊 第9課 媒體播放器課件1 冀教版.ppt》由會員分享,可在線閱讀,更多相關(guān)《2019年四年級信息技術(shù)上冊 第9課 媒體播放器課件1 冀教版.ppt(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、Lesson3媒體播放器第二階段 課堂回顧 如何讓控件動起來? 自定義控件的原理 自定義屬性的兩種方法 實現(xiàn)音量控件 多媒體簡介v 多媒體是計算機和視頻技術(shù)的結(jié)合,實際上它是兩個媒體:聲音和圖像v 音頻和視頻的播放,我們都會用到MediaPlayer這個類進行播放 從源文件中播放1,在項目的res/raw目錄下,放置一個android支持的多媒體文件,如MP3,會在R文件中生成對應(yīng)的索引2,通過MediaPlayer.create(this, R.id.et_mp3)創(chuàng)建一個文件3,使用start播放 核心代碼mediaplayer = MediaPlayer.create(this, R.r
2、aw.music02);try mediaplayer.start(); catch (IllegalStateException e) e.printStackTrace(); 注:將muisc02.mp3文件放入res/raw的文件夾中 從文件系統(tǒng)中播放1,實例化一個MediaPlayer2,MediaPlayer.setData方法調(diào)用(輸入文件所在路徑)3,調(diào)用MediaPlayer.prepare進行準備4,調(diào)用start進行播放 核心代碼private void createMusicFromPath(String path) mediaplayer = new MediaPlay
3、er();try mediaplayer.setDataSource(path);mediaplayer.prepare();mediaplayer.start(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); 注:將音頻文件放入在手機的sdcard,輸入路徑即可播放 播放網(wǎng)絡(luò)音樂1,獲取音樂鏈接地址A,通過地址創(chuàng)建Uri,通過 MediaPlayer.create(this, uri)創(chuàng)建,獲取player對象B,new出MediaPlayer對象,通過MediaPlayer.setDat
4、a(webPath)創(chuàng)建player對象,然后調(diào)用prepare();2,調(diào)用start方法進行播放 音樂播放器 多媒體狀態(tài) 使用SeekBar實現(xiàn)控制播放位置功能1,在視圖xml中拖入SeekBar控件2,設(shè)置seekBar.setMax(mediaPlayer.getDuration()為媒體的最大長度3,實現(xiàn)控件的OnSeekBarChangeListener接口4,實現(xiàn)onProgressChanged(/當進度狀態(tài)發(fā)生變化時候 SeekBar seekBar, int progress,/當前的進度 boolean fromUser)/是否由用戶操作導(dǎo)致public void onP
5、rogressChanged(SeekBar arg0, int progress, boolean isFromUser) if(isFromUser) mediaPlayer.seekTo(progress); 實現(xiàn)進度條SeekBar自動移動效果/1,創(chuàng)建一個線程Runnable run = new Runnable() public void run() / TODO Auto-generated method stub/獲取當前播放音樂的位置if(mediaPlayer != null) int current = mediaPlayer.getCurrentPosition();p
6、rogressBar.setProgress(current);if(mediaPlayer.isPlaying() progressHandler.postDelayed(run,100);/2,創(chuàng)建一個handler用于控制線程Handler progressHandler = new Handler();progressHandler.post(run);/啟動線程progressHandler.postDelayed(run,100);/延時啟動線程progressHandler.removeCallbacks(run);/刪除指定的Runnable對象,使線程對象停止運行。 停止,暫
7、停,重播功能實現(xiàn)A,停止 1,首先判斷是否是playing調(diào)用player的stop方法2,同時要將還沒有執(zhí)行的線程從handler中移除progressHandler.removeCallbacks(run);3,將進度條的seekbar的進度設(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.setProg
8、ress(0); 實現(xiàn)進度條SeekBar緩存條效果/設(shè)置緩存更新事件mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener()/實現(xiàn)更新方法public void onBufferingUpdate(MediaPlayer arg0, int arg1) /在每次更新之后,設(shè)置緩存條的進度progressBar.setSecondaryProgress(arg1*progressBar.getMax()/100);); MediaPlayer的狀態(tài)A,停止 1,首先判斷是否是playing調(diào)用player的
9、stop方法2,同時要將還沒有執(zhí)行的線程從handler中移除progressHandler.removeCallbacks(run);3,將進度條的seekbar的進度設(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); 核心代碼v mediaPlayer.reset();/重置為
10、idle狀態(tài)v mediaPlayer.setDataSource(file.getAbsolutePath();/設(shè)置播放的文件v mediaPlayer.prepare();/緩沖v mediaPlayer.setOnPreparedListener(new MyPreparedListener();/設(shè)置緩沖完成監(jiān)聽v mediaPlayer.pause();/暫停v mediaPlayer.start();/播放音樂v mediaPlayer.stop(); ();/停止v mediaPlayer.seekTo(progress);/設(shè)置播放進度v mediaPlayer.releas
11、e();/釋放關(guān)聯(lián)的資源 v progressHandler.postDelayed(run,100);/定時調(diào)用Runnable對象v progressHandler.post(run);/將Runnable對象發(fā)送到消息隊列中v progressHandler.removeCallbacks(run);/將run從消息隊列中移除 視頻播放器 SurfaceView控件 SurfaceView控件vSurfaceView可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù),是個非常重要的繪圖容器vSurfaceHolder用來操縱surface,處理它在Canvas上畫的效果和動畫,控制表面,大小
12、,像素等 核心代碼SurfaceHolder surfaceHolder = surfaceView.getHolder();/surfaceView的控制對象surfaceHolder.setFixedSize(176, 144);/設(shè)置分辨率surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);/不使用surfaceview自身的緩沖機制,把得到的數(shù)據(jù)直接輸出surfaceHolder.setKeepScreenOn(true);/保持屏幕的亮度 /在播放前設(shè)置顯示畫面mediaPlayer.setDisplay(su
13、rfaceView.getHolder(); VideoView的使用/獲取VideoView對象videoView = (VideoView) this.findViewById(R.id.videoView);/創(chuàng)建播放視頻的URIUri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+/video.mp4);/設(shè)置URIvideoView.setVideoURI(uri);/uri/設(shè)置多媒體控制器videoView.setMediaController(new MediaContro
14、ller(this);videoView.start(); SoundPoolandroid中可以用mediaplayer播放音樂,使用soundpool可以播一些短的反應(yīng)速度要求高的聲音,比如點擊時候的音效/1,創(chuàng)建SoundPoolsoundPool = new SoundPool(3,/同時播放的流的最大數(shù)量 AudioManager.STREAM_MUSIC,/ 流的類型,一般為STREAM_MUSIC0);/采樣率轉(zhuǎn)化質(zhì)量,當前無效果,使用0作為默認值 /2,載入音效int id = load(Context context, int resId, int priority) /從APK資源載入 /3,通過id播放音效 soundPool.play(soundMap.get(id),/音頻的id100, /左邊聲音大小100, /右邊聲音大小1, /優(yōu)先級別0, /循環(huán)次數(shù)1);/速率,1為正常速度 本章總結(jié) 如何使用MediaPlayer播放MP3 多媒體有哪些狀態(tài) 使用seekBar 如何使用SurfaceView播放視頻? 作業(yè) 完成音樂播放器和視頻播放器 知識就是力量