こんにちは。エンジニアのshogo4405です。普段はAndroidの開発を行いながらときどきiOSの開発を行なっています。本稿では、Android12で改善したピクチャー イン ピクチャーをMirrativに導入できないか調査した内容を紹介していきます。
はじめに
Mirrativのクライアントチームでは、四半期更新でOKRを運用しています。また、AndroidチームのOKRの取り組みの一環としてAndroid 12でPIPが改善されているので試してみたいな
という話になり試してみました。
Android12での、PIPの改善のポイントは次の通りです。
- ジェスチャー ナビゲーションでPIP モードにスムーズに遷移するための新しい API フラグ
- 動画以外のコンテンツのシームレスなサイズ変更を無効にする新しい API フラグ
- PIP モードの終了時のスムーズなアニメーション
- 新しいジェスチャーのサポート
ジェスチャー ナビゲーションで PIP モードにスムーズに遷移するための新しい API フラグ
アプリケーションが、バックグラウンドに遷移したときにPIP表示するためのフラ グのようです。試しにActivityのonCreateにセットしてみました。
override fun onCreate(savedInstanceState: Bundle?) { setPictureInPictureParams( PictureInPictureParams.Builder() .setAutoEnterEnabled(true) .build()) }
なるほど。いい感じのアニメーションで有名なVOD動画再生アプリのユーザー体験を実現できそうです。
動画以外のコンテンツのシームレスなサイズ変更を無効
MirrativでのPIP表示の主なコンテンツは、動画になります。一方で、PIP表示時には、1行コメントを表示するようにしています。そのため動画以外のコンテンツも取り扱っています。このseamlessResizeEnabled
のON/OFFをかえて。ピンチイン・アウトのアニメーションを見比べてみました。確かに、スムーズなアニメーションになっているように感じました。
このフラグにより、PIP ウィンドウで動画以外のコンテンツのサイズを変更する際に、よりスムーズなクロスフェード アニメーションを提供できるようになりました。
setPictureInPictureParams(new PictureInPictureParams.Builder()
.setSeamlessResizeEnabled(false)
.build());
PIPモードの終了時のスムーズなアニメーション
終了時のスムーズなアニメーションとあるのでPIPを終了したときのアニメーションに注目をして調査をしていました。スムーズなアニメーションと記載がありますがさっぱりわかりませんでした。ぜひコメントいただきたいです。
しかしながら、sourceRectHint
を設定することで、PIPを開始したときに一瞬黒くなることが解消するのがわかりました。
val sourceRectHint = Rect()
playerView.getGlobalVisibleRect(sourceRectHint)
setPictureInPictureParams(
PictureInPictureParams.Builder()
.setSourceRectHint(sourceRectHint)
.build()
)
適用前 | 適用後 |
---|---|
新しいジェスチャーのサポート
こちらは、Android12で標準的に動作します。特にながら作業での退避は便利ですね。ピンチインで、PIP画面が小さく。ピンチアウトで大きくなりました。
退避 | ピンチイン | ピンチアウト |
---|---|---|
まとめ
Android12でのピクチャー イン ピクチャーで追加されたプロパティーをまとめると次の表のようになります。
フラグ | 効果 |
---|---|
autoEnterEnable | デフォルトfalse。trueに設定することで、アプリをバックグラウンドにしたときに自動的にPIP状態へ遷移 |
seamlessResizeEnabled | デフォルトtrue。falseにすることでUIがついている場合にアニメーションを抑制 |
sourceRectHint | PIPを開始したときに一瞬黒くなることの解消 |
この後の展望
本研究結果よりAndroid12のPIPの改善を導入すること
で次のメリットが得られると考えます。
- バックグラウンド時にPIPモードへ自動的に移行することで、サービスでの視聴時間の向上に寄与
- アニメーションが良くなることで、体験上のストレスの低減見込
プロダクト開発はリリースしてからがスタート
です。 リリース後には、別の不具合が発生していないか確認のもちろんのこと。本仮説が妥当であるか、分析チームと協力しながら、プロダクトの定量面や定性面での分析活動を行いフィードバックを元にプロダクト改善を行なっています。今回の改善内容が、ユーザーの皆様へ提供できるように邁進していきます。
We are hiring!
ミラティブでは、一緒にアプリを作ってくれるエンジニアを募集中です!また、分析してくれるメンバーも募集しております。気軽にご連絡ください!