編輯:關於android開發
一、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 側滑菜單的實現 Android 側滑菜單的實現,參考網上的代碼,實現側滑菜單。最重要的是這個動畫類UgcAnimations,如何使用動畫類來側滑的封裝F
Android中View的滑動沖突——Android開發藝術探索筆記 介紹 相信開發Android的人都會有這種體會:從網上下載的demo運行的好好的,但是只要出現了
圖表框架HelloCharts(1)線形圖,hellocharts線形效果圖 1. 導入 .aar 2. fragment_
Android動畫效果生動有趣的通知NiftyNotification(Android Toast替代品),androidnotificationNiftyNotific
Android Studio 優秀插件(二): Parcelable C