📅  最后修改于: 2023-12-03 15:08:33.177000             🧑  作者: Mango
画中画 (PIP) 是一种在屏幕上展示两个及以上独立视频画面的技术。在 Android 8.0(API 级别 26)及以上版本中,系统提供了原生支持画中画的 API。
<activity android:name=".MyActivity"
android:supportsPictureInPicture="true" />
在需要进入画中画模式的 Activity 中,调用 enterPictureInPictureMode()
方法。该方法将 Activity 进入画中画模式,并在用户按下 Home 键后继续播放视频。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Rational aspectRatio = new Rational(videoWidth, videoHeight);
PictureInPictureParams.Builder paramsBuilder = new PictureInPictureParams.Builder();
paramsBuilder.setAspectRatio(aspectRatio).build();
enterPictureInPictureMode(paramsBuilder.build());
} else {
enterPictureInPictureMode();
}
在要离开画中画模式的 Activity 中,可以通过 isInPictureInPictureMode()
方法检查是否处于画中画模式。离开画中画模式的方式与退出普通 Activity 相同。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
if (isInPictureInPictureMode()) {
setSizeConstraints(320, 240, 1080, 720);
Rational aspectRatio = new Rational(videoWidth, videoHeight);
PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();
builder.setAspectRatio(aspectRatio).build();
setPictureInPictureParams(builder.build());
}
}
finish();
在画中画模式中,用户可以调整画面的尺寸和位置。应用可以通过 onPictureInPictureModeChanged()
方法获得画面尺寸和位置的信息,并进行相应的调整。
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
// Movable window can be dragged around
if (isInPictureInPictureMode) {
floatingActionButton.setVisibility(View.GONE);
videoView2.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH);
videoView2.setAspectRatio(videoWidth / videoHeight);
videoView2.findViewById(R.id.exo_progress).setVisibility(View.GONE);
videoView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH);
ViewGroup.LayoutParams lp = videoView.getLayoutParams();
lp.width = 400;
lp.height = 300;
videoView.setLayoutParams(lp);
}
}
在 Android 8.0 及以上版本中,用户可以通过简易的步骤在应用中添加画中画功能。通过 enterPictureInPictureMode()
方法进入画中画模式,然后应用可以通过 onPictureInPictureModeChanged()
方法对画中画模式进行调整。