Android开发笔记(一百六十七)Android8.0的画中画模式

前面的博文《 Android开发笔记(一百五十九)Android7.0的分屏模式》介绍了Android7.0的多窗口特性,但是这个分屏的区域是固定的,要么在屏幕的上半部分,要么在屏幕的下半部分,不但尺寸无法调整而且还不能拖动,使得它的用户体验不够完美。为此Android8.0又带了另一种更高级的多窗口模式,号称“Picture in Picture”(简称PIP,即“画中画”)。应用一旦进入画中画模式,就会缩小为屏幕上的一个小窗口,该窗口可拖动可调整大小,非常适合用来播放视频。那么如何才能让App支持画中画呢?接下来将对画中画的开发工作进行详细介绍。

经过前面的学习,大家知道Activity默认是支持分屏模式的,当然开发者要给activity节点添加下面的属性描述,从而声明允许分屏也是可以的:
    android:resizeableActivity="true"
但是对于画中画来说,Activity默认不支持该模式。若想让App页面能够显示画中画的效果,则必须给activity节点添加下面的属性描述,表示该页面支持画中画模式:
    android:supportsPictureInPicture="true"

除了画中画模式的属性声明,与分屏模式类似,画中画还需注意进行以下几项处理:
1. App页面从全屏模式切换到画中画模式,它的Activity生命周期也会经历销毁后重建的过程,如果开发者想保持App页面不被重建,则需给该页面的activity节点加上以下的属性描述:
    android:configChanges="screenLayout|orientation"
2. 对于视频播放页面,Activity代码同样不在onPause方法中暂停播放视频,而应当在onStop方法中暂停播放,并在onStart方法中恢复播放视频。
3. App若想获知当前是否处于画中画模式,则可调用isInPictureInPictureMode方法,该方法返回true表示处于画中画模式,返回false表示处于全屏模式。
4. 每当App进入画中画,或者退出画中画的时候,应用会触发Activity页面的onPictureInPictureModeChanged方法。通过重载该方法,应用可以实时收到画中画与全屏的切换通知,并在此控制控件的展示。比如进入画中画时,隐藏除视频画面之外的所有控件;退出画中画时,则恢复这些控件的正常显示,具体参见下列代码:
    public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
        super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
        if (isInPictureInPictureMode) { // 进入画中画模式,则隐藏其它控件
            ll_btn.setVisibility(View.GONE);
            vc_play.setVisibility(View.GONE);
        } else { // 退出画中画模式,则显示其它控件
            ll_btn.setVisibility(View.VISIBLE);
            vc_play.setVisibility(View.VISIBLE);
        }
    }

上面废话了这么多,可是要怎样才能让应用进入画中画模式呢?按下任务键并点击“分屏模式”按钮,接着把App拖到分屏区域,即可实现分屏模式的切换。然而系统却没提供“画中画模式”之类的按钮,就无法在桌面把应用拖入画中画,只能在App内部通过代码切到画中画模式。详细的画中画进入代码如下所示:
    private void enterPicInPic() {
        PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();
        // 设置宽高比例值,第一个参数表示分子,第二个参数表示分母
        // 下面的10/5=2,表示画中画窗口的宽度是高度的两倍
        Rational aspectRatio = new Rational(10,5);
        // 设置画中画窗口的宽高比例
        builder.setAspectRatio(aspectRatio);
        // 进入画中画模式,注意enterPictureInPictureMode是Android8.0之后新增的方法
        enterPictureInPictureMode(builder.build());
    }
运行测试App,打开视频文件开始播放,此时的播放界面如下图所示。


然后点击“进入画中画模式”按钮,此时整个页面缩小成屏幕右下角的一块矩形窗口,将该视频窗口拖动到屏幕上方,可见如下图所示悬浮窗效果。


若要退出画中画模式,则可点击缩小了的画中画窗口,如下图所示这时该窗口放大些许且画面呈现灰影,表示此刻画中画模式正处于控制操作。看到窗口右上角出现叉号,如果点击叉号即可关闭窗口;窗口中央出现四角正方形,如果继续点击窗口区域,则退出画中画并恢复全屏页面。

看起来感觉不错,尤其是大屏手机体验更佳。


点此查看Android开发笔记的完整目录


__________________________________________________________________________
本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。

猜你喜欢

转载自blog.csdn.net/aqi00/article/details/79693728
今日推荐