前言
Android 8.0 Oreo(API Level 26)允许活动启动画中画 Picture-in-picture(PIP)模式。PIP 是一种特殊类型的多窗口模式,主要用于视频播放。要将画中画添加到您的应用中,您需要注册支持画中画的 Activity、根据需要将 Activity 切换为画中画模式,并确保当 Activity 处于画中画模式时,界面元素处于隐藏状态且视频能够继续播放。
正文
判断是否支持画中画
//如果返回true表示支持
boolean mPipMode = getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
AndroidManifest.xml配置
<activity
android:name=".MainActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:resizeableActivity="true"
android:supportsPictureInPicture="true">
//略
</activity>
进入画中画模式
private void enterPipMode() {
PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();
//设置宽高比例,第一个是分子,第二个是分母
//分子/分母比must be between 0.418410 and 2.390000
Rational rational = new Rational(2, 1);
builder.setAspectRatio(rational);
enterPictureInPictureMode(builder.build());
}
如果横纵比[分子和分母比]太大或太小都会抛出异常。
java.lang.IllegalArgumentException: enterPictureInPictureMode: Aspect ratio is too extreme (must be between 0.418410 and 2.390000).
如果想知道是否进入画中画模式,可以重新onPictureInPictureModeChanged,比如下面中的一个就行,然后进行刷新UI界面。
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
//isInPictureInPictureMode表示是否进入pip模式了
}
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
//isInPictureInPictureMode表示是否进入pip模式了
}
Android 12后可以调节画中画窗口的大小,下面是常用的配置。
//Android12下加入的画中画配置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
builder.setSeamlessResizeEnabled(false);
builder.setAutoEnterEnabled(true);
}
参考文章
© 版权声明