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