Android進階_視頻播放控制項

來源:互聯網
上載者:User

標籤:

一、Android系統內建VideoView控制項

       1. 建立步驟:

              (1)內建視頻檔案放入res/raw檔案夾下;

              (2)聲明初始化VideoView控制項;

              (3)建立視頻檔案Uri路徑,Uri調用parse(),傳入(”android.resource://”+getPackageName()+”/”+R.raw.video)當前字串擷取資源路徑;

              (4)為視頻控制項設定播放路徑,VideoView對象調用setVideoURI(),傳入Uri對象;

              (5)開始播放,VideoView對象調用start();

       2. 重寫控制項onMeasure(),設定VideoView的自訂寬高;MeasureSpec對象調用getSize()傳入widthMeasureSpec常量和heighMeasureSpec常量獲得螢幕寬度和高度,之後調用setMeasuredDimension(),傳入寬度和高度設定控制項的寬度和高度;

       3. VideoView控制方法:

              start():從當前位置啟動視頻;

              pause():暫停視頻;

              isPlay():判斷當前視頻是否在播放;

              getDuration():獲得當前播放視頻的總時間長度(單位:毫秒);

              getCurrentPosition():獲得當前視頻播放時間長度(單位:毫秒);

       4. VideoView監聽事件:

              setOnPreparedListener():視頻準備監聽,傳入實現MediaPlayer.OnPreparedListener介面的對象,重寫onPrepared(),視頻準備播放之後調用此方法;

              setOnCompletionListener():視頻播放完成監聽,傳入實現MediaPlayer.OnCompletionListener介面的對象,重寫onCompleted(),在視頻播放完成之後調用此方法;

              setOnErrorListener():視頻播放錯誤監聽,傳入實現MediaPlayer.OnErrorListener介面的對象,重寫onError(),在視頻播放出錯時調用此方法;

              setOnTouchListener():觸摸監聽事件,傳入實現View.OnTouchListener介面的對象,重寫onTouch(),觸摸控制項之後調用此方法;

                     注意:該方法之後如果返回false,則event.getAction()只能監聽到MotionEvent.ACTION_DOWN,無法監聽到MotionEvent.ACTION_UP事件;而只有返回true,可以將觸摸事件向下分發,才能監聽MotionEvent.ACTION_UP事件;

       5. VideoView與Seekbar結合的視頻播放控制項效果:

              (1)初始化Seekbar和VideoView控制項;

              (2)使用本地路徑建立Uri對象,Uri類調用靜態方法parse(),傳入資源路徑字串常量,視頻儲存路徑為res/raw檔案夾下,則字串常量值為:"android.resource://"+getPackageName()+"/" + R.raw.video_test;

              (3)關聯VideoView的Uri路徑,VideoView對象調用setVideoURI(),傳入Uri對象;

              (4)啟動VideoView播放視頻,VideoView調用start();

              (5)為控制布局中的播放暫停按鈕設定點擊監聽事件,傳入實現onClickListener介面的對象,重寫onClick(),在此方法內判斷VideoView控制項的視頻是否播放,調用isPlaying(),如果現正播放,VideoView調用pause()暫停;否則VideoView調用start()開啟,之後擷取視頻當前播放進度和總時間長度,放入Handler對象的訊息佇列中延時1000ms發送;

              (6)為VideoView控制項設值視頻播放監聽事件,調用setOnPreparedListener(),在重寫的onPrepared()中擷取當前播放進度和總時間長度,放入訊息佇列延遲1000ms發送;

              (7)為Seekbar控制項進度條設值拉動監聽事件,調用setOnSeekBarChangeListener(),傳入實現SeekBar.OnSeekBarChangeListener()介面的對象,重寫onProgressChanged(),在該方法內判斷fromUser為true時為VideoView設定進度,調用seekTo()傳入使用者拖動進度;之後先清空訊息,再重新發送總時間長度和播放進度訊息;

              (8)為VideoView控制項設定觸摸事件監聽,調用setOnTouchListener(),傳入實現OnTouchListener介面的對象,重寫onTouch(),在該方法內如果是按下事件,顯示底部導航,同時3000ms後發送訊息通知,隱藏底部導航;

              (9)在訊息處理事件中,先判斷訊息類型,如果是控制進度條的訊息,重新設定進度條,之後再次發送VideoView的當前播放時間和總時間長度;如果是隱藏控制欄的訊息類型,則控制欄調用setVisibility(),傳入View.GONE;

 

二、Android系統底層SurfaceView控制項

       1. SurfaceView與MediaPlayer結合使用,代替VideoView的原因:VideoView中內建MediaPlayer,在ListView中的Item中多次使用之後會使系統記憶體過大;

       2. 使用步驟:

              (1)布局檔案中建立SurfaceView控制項,在Activity中聲明並初始化該控制項;

              (2)聲明並執行個體化MediaPlayer對象;

              (3)擷取SurfaceHolder對象,用於改變SurfaceView的像素點,SurfaceView對象調用getHolder();

              (4)SurfaceHolder對象調用addCallback(),傳入實現SurfaceHolder.Callback介面的對象,重寫三個方法:

                     方法1:surfaceCreate():當SurfaceView建立時調用此方法,在此方法內開啟視頻播放;

                     方法2:surfaceChanged():SurfaceView在像素點發生改變時調用此方法;

                     方法3:surfaceDestroy():SurfaceView在銷毀之後調用此方法;

              (5)開啟視頻播放步驟:

                     (5-1)在視頻播放前重設MediaPlayer,MediaPlayer對象調用reset();

                     (5-2)擷取視頻地址,建立Uri對象,Uri類調用靜態方法parse(),傳入資源路徑,如“”android:resource://”+getPackageName()+”/”+R.raw.test”;

                     (5-3)改視頻播放器設定SurfaceHolder,MediaPlayer對象調用setDisplay(),傳入SurfaceHolder對象;

                     (5-4)關聯視頻播放地址,MediaPlayer對象調用setDataSource()傳入內容物件和Uri對象;

                     (5-5)開啟非同步準備視頻,MediaPlayer對象調用prepareAsync()即可;

              (6)為MediaPlayer設定準備完成監聽事件,MediaPlayer對象調用setOnPreparedListener(),傳入實現MediaPlayer.OnPreparedListener介面的對象,重寫onPrepared(),在該方法內傳入的形參MediaPlayer對象調用start();

 

Android進階_視頻播放控制項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.