前言

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);
}

参考文章

  1. 对画中画 (PiP) 的支持
  2. Android画中画(PIP)模式使用
  3. Android画中画模式-看这篇就够啦
  4. Android实现画中画功能(图片)

相关文章

暂无评论

none
暂无评论...