כשמנפישים רכיבים משותפים, יש כמה תרחישי שימוש ספציפיים שבהם יש המלצות ספציפיות.
תמונות אסינכרוניות
בדרך כלל משתמשים בספרייה כדי לטעון תמונה באופן אסינכרוני, למשל כשמשתמשים ב-Coil's AsyncImage
composable.
כדי שהמעבר בין שני רכיבים שניתנים להרכבה יהיה חלק, מומלץ להגדיר את הערכים של placeholderMemoryCacheKey()
ו-memoryCacheKey()
לאותו מפתח כמחרוזת שנגזרת ממפתח הרכיב המשותף, כך שמפתח המטמון יהיה זהה לרכיבים המשותפים התואמים. הרכיב החדש המשותף ישתמש במטמון של הרכיב התואם כמחזיק המקום עד שהתמונה החדשה תיטען.
השימוש האופייני ב-AsyncImage
הוא כדלקמן:
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 ) )
טקסט
כדי להנפיש שינויים ב-fontSize
, משתמשים ב-Modifier.sharedBounds()
, resizeMode =
ScaleToBounds()
. המעבר הזה מאפשר שינוי גודל דינמי יחסית. אפשר לשנות את הפרמטר contentScale
כדי להנפיש משקל או סגנון גופן ספציפיים.
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() ) )
כברירת מחדל, השינויים ב-TextAlign
לא מונפשים. במקום זאת, צריך להשתמש ב-Modifier.wrapContentSize()
או ב-Modifier.wrapContentWidth()
במקום ב-TextAlign
שונים למעברים משותפים.