Quando animi elementi condivisi, ci sono alcuni casi d'uso particolari per i quali sono disponibili consigli specifici.
Immagini asincrone
È comune utilizzare una libreria per caricare un'immagine in modo asincrono, ad esempio quando
si utilizza il componente componibile AsyncImage
di Coil.
Affinché funzioni senza problemi tra due composable, è consigliabile impostare
placeholderMemoryCacheKey()
e memoryCacheKey()
sulla stessa chiave di una stringa
derivata dalla chiave dell'elemento condiviso, in modo che la chiave della cache sia la stessa per gli
elementi condivisi corrispondenti. Il nuovo elemento condiviso utilizzerà la cache della corrispondenza
come segnaposto finché non viene caricata la nuova immagine.
L'utilizzo tipico di AsyncImage
è il seguente:
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 ) )
Testo
Per animare le modifiche di fontSize
, utilizza Modifier.sharedBounds()
, resizeMode =
ScaleToBounds()
. Questa transizione rende il cambio
di dimensioni relativamente fluido. Il parametro contentScale
può essere modificato per animare
un peso o uno stile specifico del carattere.
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() ) )
Le modifiche TextAlign
non sono animate per impostazione predefinita. Utilizza invece
Modifier.wrapContentSize()
o Modifier.wrapContentWidth()
anziché
TextAlign
diversi per le transizioni condivise.