こんにちは。
アプリケーション共同開発部の池田です。
Picture In Picture は Android 7.0 で追加されたマルチウィンドウ モードの1つで、ユーザーが他のアプリを操作していても、動画などのコンテンツを表示することができます。
Android O では、従来 Android TV でのみ利用できた Picture In Picture が、すべての Android 端末で利用できるようになります。
本記事では Picture In Picture の使用方法と、使用感を紹介します。
※ Developer Preview 1 で確認しているため、今後動作が変わる可能性があります。
Picture In Picture の使用方法
使用の宣言
AndroidManifest で Picture In Picture を使用したい Activity の android:supportsPictureInPicture を true に設定します。
<activity android:name=".VideoActivity" android:supportsPictureInPicture="true">
Picture In Picture の開始
android:supportsPictureInPicture を true に設定した Activity で Activity.enterPictureInPictureMode() を呼び出すことで切り替わります。
Picture In Picture 時には、ウィンドウサイズはシステムにより自動的に決定され、ウィンドウにタッチイベントが届きませんが、Android O では Activity.enterPictureInPictureMode() や Activity.setPictureInPictureArgs() で PictureInPictureArgs オブジェクトを渡すことで以下の制御が可能です。
- ウィンドウのアスペクト比の指定
- Picture In Picture 専用のメニューの表示及びメニュータップ時に発行される PendingIntent の設定
PictureInPictureArgs args = new PictureInPictureArgs(); // Picture In Pictureのメニュータップ時のActionを設定 Intent intent = new Intent(ACTION); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, flags); Icon icon = Icon.createWithResource(context, R.mipmap.ic_launcher);//Picture In Pictureのメニュー用アイコン RemoteAction action = new RemoteAction(icon, "title", "contentDescription", pendingIntent); List<RemoteAction> actions = new ArrayList<>(Arrays.asList(action)); args.setActions(actions); //アスペクト比設定(1:2) args.setAspectRatio(2.0f); //Picture In Picture の開始 enterPictureInPictureMode(args);
使用感
Picture In Picture を開始すると、ウィンドウが他アプリの上に重ねて描画されます。ウィンドウをドラッグすることで任意の位置に移動できます。
ウィンドウを画面外までドラッグすると、ウィンドウの一部のみが表示されます。文字入力時など一時的に場所を空けたいときに便利です。
PictureInPictureArgs でメニューを表示するように設定した状態でウィンドウをタップすると、メニューが表示されます。
参考
フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!
フェンリルの Facebook ページでは、最新トピックをお知らせしています。よろしければいいね!してください!
Sleipnir の Facebook ページでは、ユーザーの方たちとのコミュニケーションや最新情報の投稿などを行なっています。よろしければいいね!してください!