一、
1、思维导图
两个方案中都提到了复用播放器,那么该如何复用呢?思路就是将下图中添加到Root Container中的customvideoview移除出来,添加到Dialog root Container中。
即完成下图所示的内容,这样便完成了customvideoview的复用。
2、
3、
FullToSmallListener主要用于与AdSlot的接口进行回调
构造方法,通过样式R.style.dialog_full_screen,保证dialog是全屏的。后面两句是接收传入进来的参数。
dialog的onCreate()方法与activity的onCreate()方法基本一致
initVideoView()用于初始化videoview,初始化控件,并设置listener。
通过为videoview设置listener,视频播放器触发相应事件的时候就会通知dialog,而不再通知activity。
mvideoview.mute(false):设置不静音
设置完成后将videoview添加到父容器中
全屏返回关闭按钮点击事件。
在点击dialog的back按钮时,会调用该方法。首先会取消dialog的显示,其次,如果listener不为空,则将当前的播放位置传递给adslot逻辑层。这样返回事件就处理完了,因为它不需要处理具体的逻辑
back键按下事件监听
onBackPreseed()方法主要调用了clickBackBtn()方法
onWindowFocusChanged():焦点状态改变时的回调
dialog从没有获取到焦点到获取到焦点,或者从没有获取到焦点到获取到焦点时会回调这个方法
如果在构造方法中强制让视频播放器处于播放或者暂停状态呢?因为对话框的创建是需要一定时间的,如果在构造方法中就调用videoview的resume()方法是不会起效果的。也就是说,只有当对话框完全展示到用户面前并且获取到焦点以后才是一个合理的播放时机。此时直接调用resume()方法是不够的,因为在有些手机上可以恢复播放,而在有些手机上恢复不了。所以添加了一个是否是首次创建的判断,如果是首次创建,调用seekAndResume(position)方法,否则才会调用resume()直接去进行播放