Saat menganimasikan elemen bersama, ada beberapa kasus penggunaan tertentu yang memiliki rekomendasi spesifik.
Gambar asinkron
Sangat umum menggunakan library untuk memuat gambar secara asinkron, seperti saat
menggunakan composable AsyncImage
Coil.
Agar dapat berfungsi dengan lancar di antara dua composable, sebaiknya setel
placeholderMemoryCacheKey()
dan memoryCacheKey()
ke kunci yang sama dengan string
yang berasal dari kunci elemen bersama, sehingga kunci cache sama untuk
elemen bersama yang cocok. Elemen bersama yang baru akan menggunakan cache pencocokannya
sebagai placeholder hingga elemen tersebut memuat gambar baru.
Penggunaan standar untuk AsyncImage
adalah sebagai berikut:
AsyncImage( model = ImageRequest.Builder(LocalContext.current) .data("your-image-url") .crossfade(true) .placeholderMemoryCacheKey("image-key") // same key as shared element key .memoryCacheKey("image-key") // same key as shared element key .build(), placeholder = null, contentDescription = null, modifier = Modifier .size(120.dp) .sharedBounds( rememberSharedContentState( key = "image-key" ), animatedVisibilityScope = this ) )
Teks
Untuk menganimasikan perubahan fontSize
, gunakan Modifier.sharedBounds()
, resizeMode =
ScaleToBounds()
. Transisi ini membuat perubahan
ukuran relatif lancar. Parameter contentScale
dapat disesuaikan untuk menganimasikan
ketebalan atau gaya font tertentu.
Text( text = "This is an example of how to share text", modifier = Modifier .wrapContentWidth() .sharedBounds( rememberSharedContentState( key = "shared Text" ), animatedVisibilityScope = this, enter = fadeIn(), exit = fadeOut(), resizeMode = SharedTransitionScope.ResizeMode.ScaleToBounds() ) )
Perubahan TextAlign
tidak dianimasikan secara default. Sebagai gantinya, gunakan
Modifier.wrapContentSize() / Modifier.wrapContentWidth()
, bukan TextAlign
yang berbeda,
untuk transisi bersama.