如何在安卓系统中实现画中画(PIP)?
本文介绍了如何在安卓应用中实现画中画。 我们在谷歌地图等很多应用中看到,在使用导航时,当我们关闭应用时,屏幕右下方会出现一个浮动屏幕,如下图所示。该屏幕被称为画中画模式。
什么是画中画模式? PIP 是一种特殊类型的多窗口模式,主要用于需要在屏幕上活跃但不应占用整个屏幕空间的活动,如观看视频、视频通话、导航等。它允许用户在屏幕一角(默认为右下角)的小窗口中观看视频,同时在应用程序之间导航或浏览主屏幕上的内容。Android 8.0 (API 等级 26)及以上允许以 PIP 模式启动活动。 画中画窗口出现在屏幕的最顶层。您可以使用一些特殊的切换将画中画窗口拖到另一个位置。当你点击窗口时,会出现两个特殊的控件:
- 全屏切换(在窗口中央)和
- 关闭按钮(右上角的“X”)。
下面是画中画模式的实现。
- 在安卓工作室创建一个安卓项目。
-
声明画中画支持:默认情况下,没有活动启用画中画模式。这需要通过清单文件
java <activity android:name="VideoActivity" android:supportsPictureInPicture="true" android:configChanges= "screenSize|smallestScreenSize|screenLayout|orientation" ...
来完成 3. 现在,在布局文件( activity_main.xml )中,我们将在活动中有两个组件: * a 文本视图和 * 一个按钮。 4. 现在,让我们在MainActivity.java文件中添加一些代码。在这个应用程序中,我们将通过点击按钮将活动更改为画中画模式。 * 首先,我们将使用 getWindowManager() 获取显示大小。 * 之后使用功能企业图片输入图片模式(),应该会提供一个图片输入参数。生成器参数。
下面是相同的代码。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="2"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="App for demonstrating the Picture
in Picture mode in Android"
android:layout_gravity="center"
android:gravity="center_horizontal|bottom"
android:textSize="25dp"
android:layout_weight="1"/>
<Button
android:id="@+id/enter_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_horizontal"
android:layout_gravity="center"
android:text="Enter PIP"
android:textSize="25dp"
android:background="#FFF"
/>
</LinearLayout>
MainActivity.java
package com.vaibhav.pictureinpicture;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ActionBar;
import android.app.PictureInPictureParams;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Rational;
import android.view.Display;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button enter;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getActionBar();
enter = findViewById(R.id.enter_button);
enter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
Display d = getWindowManager()
.getDefaultDisplay();
Point p = new Point();
d.getSize(p);
int width = p.x;
int height = p.y;
Rational ratio
= new Rational(width, height);
PictureInPictureParams.Builder
pip_Builder
= new PictureInPictureParams
.Builder();
pip_Builder.setAspectRatio(ratio).build();
enterPictureInPictureMode(pip_Builder.build());
}
});
}
}
输出:
- 按下按钮启用活动的画中画模式。
- 这是活动在画中画模式下的样子。
版权属于:月萌API www.moonapi.com,转载请注明出处