📜  如何在 Android 中实现画中画 (PIP)?(1)

📅  最后修改于: 2023-12-03 15:08:33.177000             🧑  作者: Mango

在Android中实现画中画 (PIP)

画中画 (PIP) 是一种在屏幕上展示两个及以上独立视频画面的技术。在 Android 8.0(API 级别 26)及以上版本中,系统提供了原生支持画中画的 API。

实现步骤
步骤一:在 AndroidManifest.xml 中声明支持画中画的 Activity
<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() 方法对画中画模式进行调整。