Android上定義播放器控制元件UniversalVideoView
阿新 • • 發佈:2019-02-19
在Android上播放視訊最簡單的方法是使用SDK中內建的VideoView,然後加上MediaController來控制視訊播放暫停等,但是這樣有一個缺點是無法定製自己的控制UI,所以這裡提供一個自定義播放控制元件,它可以設定多種自定義屬性(如loading樣式,錯誤視訊等),並且很容易在全屏與非全屏之間切換,另外支援Android V2.3及以上系統.
使用方法
完整的使用方法請參考專案裡的Sample.
1. 在build.gradle檔案上加入以下依賴包.
dependencies { compile 'com.linsea:universalvideoview:1.1.0@aar' }
2. 在佈局檔案中加入自定義View,注意要使UniversalVideoView和UniversalMediaController位於同一個父Layout中, 這樣控制條才會浮在視訊之上.
<FrameLayout android:id="@+id/video_layout" android:layout_width="fill_parent" android:layout_height="200dp" android:background="@android:color/black"> <com.universalvideoview.UniversalVideoView android:id="@+id/videoView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" app:uvv_autoRotation="true" app:uvv_fitXY="false" /> <com.universalvideoview.UniversalMediaController android:id="@+id/media_controller" android:layout_width="fill_parent" android:layout_height="fill_parent" app:uvv_scalable="true" /> </FrameLayout>
3. 在onCreate方法中設定相關事件的監聽.
View mBottomLayout; View mVideoLayout; UniversalVideoView mVideoView; UniversalMediaController mMediaController; mVideoView = (UniversalVideoView) findViewById(R.id.videoView); mMediaController = (UniversalMediaController) findViewById(R.id.media_controller); mVideoView.setMediaController(mMediaController); mVideoView.setVideoViewCallback(new UniversalVideoView.VideoViewCallback() { @Override public void onScaleChange(boolean isFullscreen) { this.isFullscreen = isFullscreen; if (isFullscreen) { ViewGroup.LayoutParams layoutParams = mVideoLayout.getLayoutParams(); layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; mVideoLayout.setLayoutParams(layoutParams); //設定全屏時,無關的View消失,以便為視訊控制元件和控制器控制元件留出最大化的位置 mBottomLayout.setVisibility(View.GONE); } else { ViewGroup.LayoutParams layoutParams = mVideoLayout.getLayoutParams(); layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height = this.cachedHeight; mVideoLayout.setLayoutParams(layoutParams); mBottomLayout.setVisibility(View.VISIBLE); } } @Override public void onPause(MediaPlayer mediaPlayer) { // 視訊暫停 Log.d(TAG, "onPause UniversalVideoView callback"); } @Override public void onStart(MediaPlayer mediaPlayer) { // 視訊開始播放或恢復播放 Log.d(TAG, "onStart UniversalVideoView callback"); } @Override public void onBufferingStart(MediaPlayer mediaPlayer) {// 視訊開始緩衝 Log.d(TAG, "onBufferingStart UniversalVideoView callback"); } @Override public void onBufferingEnd(MediaPlayer mediaPlayer) {// 視訊結束緩衝 Log.d(TAG, "onBufferingEnd UniversalVideoView callback"); } });
注意:
UniversalVideoView 沒有儲存播放的狀態,如播放到第幾分鐘了,所以需要應用自己儲存這些狀態並恢復.
如果為了避免在旋轉螢幕時系統重啟Activity,需要新增Activity的屬性:
android:configChanges="orientation|keyboardHidden|screenSize
4 定製屬性
為了保證定製UI的靈活度,提供以下屬性:
uvv_fitXY
UniversalVideoView的屬性,布林值,true時設定視訊縮放時在X,Y方向上鋪滿View設定的寬度和高度,這樣可能使視訊變形.false時則縮放時保持視訊的長寬比例,與SDK中的VideoView類似.
uvv_autoRotation
UniversalVideoView的屬性,布林值,true時視訊會根據重力響應通知客戶進行全屏與非全屏之間的切換.
uvv_scalable
UniversalMediaController屬性,布林值,是否顯示控制條右下方的縮放按鈕,如果不想全屏播放時,可以設定為false不顯示.