Android上定义播放器控件UniversalVideoView

来源:互联网 发布:写作软件知乎 编辑:程序博客网 时间:2024/06/08 18:50

在Android上播放视频最简单的方法是使用SDK中内置的VideoView,然后加上MediaController来控制视频播放暂停等,但是这样有一个缺点是无法定制自己的控制UI,所以这里提供一个自定义播放控件,它可以设置多种自定义属性(如loading样式,错误视频等),并且很容易在全屏与非全屏之间切换,另外支持Android V2.3及以上系统.


项目地址: https://github.com/linsea/UniversalVideoView


使用方法

完整的使用方法请参考项目里的Sample.


1. 在build.gradle文件上加入以下依赖包.

dependencies {      compile 'com.linsea:universalvideoview:1.1.0@aar' }

2. 在布局文件中加入自定义View,注意要使UniversalVideoView和UniversalMediaController位于同一个父Layout中, 这样控制条才会浮在视频之上.



[xml] view plain copy


  1.             <FrameLayout  
  2.                 android:id=“@+id/video_layout”  
  3.                 android:layout_width=“fill_parent”  
  4.                 android:layout_height=“200dp”  
  5.                 android:background=“@android:color/black”>  
  6.   
  7.                 <com.universalvideoview.UniversalVideoView  
  8.                     android:id=“@+id/videoView”  
  9.                     android:layout_width=“fill_parent”  
  10.                     android:layout_height=“fill_parent”  
  11.                     android:layout_gravity=“center”  
  12.                     app:uvv_autoRotation=“true”  
  13.                     app:uvv_fitXY=“false” />  
  14.   
  15.                 <com.universalvideoview.UniversalMediaController  
  16.                     android:id=“@+id/media_controller”  
  17.                     android:layout_width=“fill_parent”  
  18.                     android:layout_height=“fill_parent”  
  19.                     app:uvv_scalable=“true” />  
  20.   
  21.             </FrameLayout>  


3. 在onCreate方法中设置相关事件的监听.

[java] view plain copy
  1. View mBottomLayout;  
  2. View mVideoLayout;  
  3. UniversalVideoView mVideoView;  
  4. UniversalMediaController mMediaController;  
  5.   
  6. mVideoView = (UniversalVideoView) findViewById(R.id.videoView);  
  7. mMediaController = (UniversalMediaController) findViewById(R.id.media_controller);  
  8. mVideoView.setMediaController(mMediaController);  
  9.   
  10. mVideoView.setVideoViewCallback(new UniversalVideoView.VideoViewCallback() {  
  11.     @Override  
  12.     public void onScaleChange(boolean isFullscreen) {  
  13.         this.isFullscreen = isFullscreen;  
  14.         if (isFullscreen) {  
  15.             ViewGroup.LayoutParams layoutParams = mVideoLayout.getLayoutParams();  
  16.             layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;  
  17.             layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;  
  18.             mVideoLayout.setLayoutParams(layoutParams);  
  19.             //设置全屏时,无关的View消失,以便为视频控件和控制器控件留出最大化的位置  
  20.             mBottomLayout.setVisibility(View.GONE);  
  21.         } else {  
  22.             ViewGroup.LayoutParams layoutParams = mVideoLayout.getLayoutParams();  
  23.             layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;  
  24.             layoutParams.height = this.cachedHeight;  
  25.             mVideoLayout.setLayoutParams(layoutParams);  
  26.             mBottomLayout.setVisibility(View.VISIBLE);  
  27.         }  
  28.     }  
  29.   
  30.     @Override  
  31.     public void onPause(MediaPlayer mediaPlayer) { // 视频暂停  
  32.         Log.d(TAG, ”onPause UniversalVideoView callback”);  
  33.     }  
  34.   
  35.     @Override  
  36.     public void onStart(MediaPlayer mediaPlayer) { // 视频开始播放或恢复播放  
  37.         Log.d(TAG, ”onStart UniversalVideoView callback”);  
  38.     }  
  39.   
  40.     @Override  
  41.     public void onBufferingStart(MediaPlayer mediaPlayer) {// 视频开始缓冲  
  42.         Log.d(TAG, ”onBufferingStart UniversalVideoView callback”);  
  43.     }  
  44.   
  45.     @Override  
  46.     public void onBufferingEnd(MediaPlayer mediaPlayer) {// 视频结束缓冲  
  47.         Log.d(TAG, ”onBufferingEnd UniversalVideoView callback”);  
  48.     }  
  49.   
  50. });  

注意: 
UniversalVideoView 没有保存播放的状态,如播放到第几分钟了,所以需要应用自己保存这些状态并恢复. 
如果为了避免在旋转屏幕时系统重启Activity,需要添加Activity的属性: 
[xml] view plain copy
  1. 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不显示.





原创粉丝点击