शेयर किए गए एलिमेंट में ऐनिमेशन जोड़ते समय, इस्तेमाल के कुछ ऐसे उदाहरण होते हैं जिनके लिए खास सुझाव दिए गए हैं.
एसिंक्रोनस इमेज
आम तौर पर, इमेज को एसिंक्रोनस तरीके से लोड करने के लिए किसी लाइब्रेरी का इस्तेमाल किया जाता है. जैसे, Coil के AsyncImage कंपोज़ेबल का इस्तेमाल करते समय.
दो कंपोज़ेबल के बीच इसे आसानी से काम करने के लिए, हमारा सुझाव है कि 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 में किए गए बदलावों में डिफ़ॉल्ट रूप से ऐनिमेशन नहीं होता है. इसके बजाय, शेयर किए गए ट्रांज़िशन के लिए अलग-अलग TextAlign इस्तेमाल करने के बजाय, Modifier.wrapContentSize() या Modifier.wrapContentWidth() का इस्तेमाल करें.