Android 12 memperkenalkan peningkatan perilaku dan fitur baru untuk mode picture-in-picture (PiP).
Peningkatan perilaku untuk ketuk sekali dan ketuk dua kali
Android 12 telah meningkatkan perilaku PiP untuk ketuk sekali dan ketuk dua kali sebagai berikut:
Sekarang, ketuk sekali di jendela PiP akan menampilkan kontrol untuk pengguna. Sebelumnya, ketuk sekali akan memperluas jendela PiP dan kontrol yang ditampilkan.
Sekarang, ketuk dua kali di jendela PiP akan mengalihkan antara ukuran PiP saat ini dan ukuran PiP maksimum. Sebelumnya, ketuk dua kali mode PiP kiri untuk mengaktifkan mode layar penuh.
Fitur baru
Android 12 memperkenalkan fitur baru berikut untuk mode PiP:
Flag API baru untuk transisi yang lebih lancar ke mode PiP dalam navigasi gestur
Tag API baru untuk menonaktifkan pengubahan ukuran yang lancar untuk konten non-video.
Flag API baru untuk transisi yang lebih lancar ke mode PiP dalam navigasi gestur
Dengan Android 12, Anda dapat menggunakan flag
setAutoEnterEnabled
baru untuk memberikan transisi yang lebih lancar ke mode PiP saat menggeser ke beranda dalam
mode navigasi gestur. Sebelumnya, Android menunggu animasi geser ke beranda
untuk menyelesaikan sebelum memudar di jendela PiP.
Untuk mengimplementasikan fitur ini:
Gunakan
setAutoEnterEnabled
untuk membuatPictureInPictureParams.Builder
, sebagai berikut:setPictureInPictureParams(new PictureInPictureParams.Builder() .setAspectRatio(aspectRatio) .setSourceRectHint(sourceRectHint) .setAutoEnterEnabled(true) .build());
Panggil
setPictureInPictureParams
menggunakan informasiPictureInPictureParams
terbaru lebih awal. Aplikasi tidak perlu menunggu callbackonUserLeaveHint
(seperti yang akan dilakukan di Android 11).Misalnya, aplikasi dapat memanggil
setPictureInPictureParams
pada pemutaran pertama dan pemutaran berikutnya jika rasio tinggi lebar diubah.Panggil
setAutoEnterEnabled(false)
jika perlu. Misalnya, aplikasi video mungkin tidak optimal untuk memasukkan PiP jika pemutaran saat ini dalam keadaan dijeda.
Tag API baru untuk menonaktifkan pengubahan ukuran yang lancar untuk konten non-video.
Android 12 menambahkan flag SeamlessResizeEnabled
yang menyediakan animasi cross-fading yang jauh lebih lancar saat mengubah ukuran
konten non-video di jendela PiP. Sebelumnya, mengubah ukuran konten non-video di
jendela PiP dapat membuat artefak visual yang janggal.
Flag setSeamlessResizeEnabled
ditetapkan ke true
secara default untuk
kompatibilitas mundur. Untuk konten video, biarkan setelan ini ditetapkan pada true
dan untuk konten non-video, ubah ke false
.
Untuk menonaktifkan pengubahan ukuran konten non-video yang lancar:
setPictureInPictureParams(new PictureInPictureParams.Builder()
.setSeamlessResizeEnabled(false)
.build());
Dukungan untuk animasi yang lebih halus saat keluar dari mode PiP
Di Android 12, flag SourceRectHint
kini digunakan kembali untuk menerapkan animasi yang lebih halus saat keluar dari mode PiP.
Saat keluar, sistem akan membuat animasi menggunakan sourceRectHint
yang tersedia saat ini, apakah itu Rect
asli yang digunakan untuk memasukkan PIP ataukah
Rect
yang diperbarui yang disediakan oleh aplikasi.
Untuk menerapkan fitur ini, update aplikasi Anda seperti berikut:
Lanjutkan untuk menyusun
PictureInPictureParams
dengansourceRectHint
danaspectRatio
untuk animasi entri yang lancar.Jika perlu, update
sourceRectHint
sebelum sistem memulai transisi keluar. Saat sistem akan keluar dari mode PIP, hierarki tampilan aktivitas diatur ke konfigurasi tujuannya (misalnya, layar penuh). Aplikasi dapat melampirkan pemroses perubahan tata letak ke tampilan root atau tampilan targetnya (seperti tampilan pemutar video) untuk mendeteksi peristiwa dan mengupdate sourceRectHint sebelum animasi dimulai.// Listener is called immediately after the user exits PIP but before animating. playerView.addOnLayoutChangeListener { _, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom -> if (left != oldLeft || right != oldRight || top != oldTop || bottom != oldBottom) { // The playerView's bounds changed, update the source hint rect to // reflect its new bounds. val sourceRectHint = Rect() playerView.getGlobalVisibleRect(sourceRectHint) setPictureInPictureParams( PictureInPictureParams.Builder() .setSourceRectHint(sourceRectHint) .build() ) } }
Dukungan untuk gestur baru
Android 12 kini mendukung gestur sembunyi dan cubit untuk memperbesar untuk jendela PiP:
Untuk menyembunyikan jendela, pengguna dapat menarik jendela ke tepi kiri atau kanan. Untuk membatalkan penyembunyian batas jendela, pengguna dapat mengetuk bagian jendela yang disembunyikan atau menyingkapnya.
Pengguna kini dapat mengubah ukuran jendela PiP menggunakan cubit untuk memperbesar.