2. MVP视频播放器基本架构
2.1 组成部分:
显示:视频的加载页面,以及直接反馈给用户的视频内容
控制:包括开始停止按键,播放进度条,以及一些附加功能,如分享,下载等
手势:滑动手指调节音量和进度
2.2 代码结构:
主要由四个文件组成:
VipVideoPlayer.java
VipVideoView.java
VipMediaControllerBottom.java
VipMediaControllerTop.java
这个类是个FrameLayout,视频初始和加载的图片,以及重播图片也是在这个视图中。
VipVideoView.java 视频播放器的核心类,这里使用到了Vitamio多媒体框架。这个类继承了SurfaceView,不仅用作视频显示,而且处理了视频相关事件的分发,为外部调 用提供了相应接口。
VipMediaControllerBottom.java 图中下半部分内容。
VipMediaControllerTop.java 图中上半部分内容,这部分的显示和隐藏和Bottom绑定在一起。
因为我们在使用的时候都是在布局文件中添加了vip_video_player.xml,所以我们优先了解一下它的组成。
这是vip_video_player.xml的内容:
<?xml version="1.0" encoding="utf-8"?>
<com.mobilead.mvp.player.VipVideoPlayer
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.mobilead.mvp.player.VipVideoView
android:id="@+id/vip_videoview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<include
layout="@layout/vip_media_controller_top"
android:id="@+id/controller_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<!-- <ProgressBar android:id="@+id/load_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/loading_big"
android:indeterminateDuration="800"
android:indeterminateBehavior="repeat"
android:layout_gravity="center"/>
-->
<include
layout="@layout/mediaplayer_progress"
android:id="@+id/load_progress"
android:layout_gravity="center"
/>
<!-- <TextView
android:id="@+id/load_rate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@android:color/white"
android:text="" /> -->
</LinearLayout>
<!-- <ImageView android:id="@+id/playPauseIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/play_btn_play_big_detail"
android:visibility="gone"/> -->
<include layout="@layout/vip_replay"
android:id="@+id/replay"
android:visibility="gone"/>
<include layout="@layout/vip_media_ad_time"
android:id="@+id/adtime"
android:visibility="gone"/>
<include
layout="@layout/vip_media_controller_bottom"
android:id="@+id/controller_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:visibility="gone"/>
</com.mobilead.mvp.player.VipVideoPlayer>
id:
vip_videoview就是前面说的VipVideoView
controller_top对应vip_media_controller_top.xml
load中有一个mediaplayer_progress布局,这个布局就是视频播放器中间的一块内容,包含了视频log,播放进度条和加载百分比
replay也是一个布局文件,它是视频播放完成之后显示在中间的一个带有重播按键的一个view
attime 广告现实的剩余时间,暂时不用
controller_bottom 对应vip_media_controller_bottom.xml