navigation-compose নির্ভরতা সহ শেয়ার্ড এলিমেন্ট ব্যবহার করতে, Modifier.sharedElement() ব্যবহার করুন যা একটি AnimatedVisibilityScope কে প্যারামিটার হিসেবে নেয়। আপনি এটি ব্যবহার করে কোনটি দৃশ্যমান হবে এবং কখন হবে তা নির্ধারণ করতে পারেন।
শেয়ার্ড এলিমেন্টের সাথে navigation-compose ব্যবহারের একটি উদাহরণ নিচে দেওয়া হল:
@Preview @Composable fun SharedElement_PredictiveBack() { SharedTransitionLayout { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home" ) { composable("home") { HomeScreen( this@SharedTransitionLayout, this@composable, { navController.navigate("details/$it") } ) } composable( "details/{item}", arguments = listOf(navArgument("item") { type = NavType.IntType }) ) { backStackEntry -> val id = backStackEntry.arguments?.getInt("item") val snack = listSnacks[id!!] DetailsScreen( id, snack, this@SharedTransitionLayout, this@composable, { navController.navigate("home") } ) } } } } @Composable fun DetailsScreen( id: Int, snack: Snack, sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedContentScope, onBackPressed: () -> Unit ) { with(sharedTransitionScope) { Column( Modifier .fillMaxSize() .clickable { onBackPressed() } ) { Image( painterResource(id = snack.image), contentDescription = snack.description, contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "image-$id"), animatedVisibilityScope = animatedContentScope ) .aspectRatio(1f) .fillMaxWidth() ) Text( snack.name, fontSize = 18.sp, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "text-$id"), animatedVisibilityScope = animatedContentScope ) .fillMaxWidth() ) } } } @Composable fun HomeScreen( sharedTransitionScope: SharedTransitionScope, animatedContentScope: AnimatedContentScope, onItemClick: (Int) -> Unit, ) { LazyColumn( modifier = Modifier .fillMaxSize() .padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { itemsIndexed(listSnacks) { index, item -> Row( Modifier.clickable { onItemClick(index) } ) { Spacer(modifier = Modifier.width(8.dp)) with(sharedTransitionScope) { Image( painterResource(id = item.image), contentDescription = item.description, contentScale = ContentScale.Crop, modifier = Modifier .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "image-$index"), animatedVisibilityScope = animatedContentScope ) .size(100.dp) ) Spacer(modifier = Modifier.width(8.dp)) Text( item.name, fontSize = 18.sp, modifier = Modifier .align(Alignment.CenterVertically) .sharedElement( sharedTransitionScope.rememberSharedContentState(key = "text-$index"), animatedVisibilityScope = animatedContentScope, ) ) } } } } } data class Snack( val name: String, val description: String, @DrawableRes val image: Int )
ভাগ করা উপাদানগুলির সাথে ভবিষ্যদ্বাণীমূলক ব্যাক
শেয়ার্ড এলিমেন্টের সাথে প্রেডিক্টিভ ব্যাক ব্যবহার করতে, এই ধাপগুলি অনুসরণ করুন:
পূর্ববর্তী বিভাগের স্নিপেট ব্যবহার করে সর্বশেষ
navigation-composeনির্ভরতা ব্যবহার করুন।dependencies { def nav_version = "2.8.0-beta02" implementation "androidx.navigation:navigation-compose:$nav_version" }ডেভেলপার অপশনে প্রেডিক্টিভ ব্যাক সেটিং সক্ষম করুন।
আপনার
AndroidManifest.xmlফাইলেandroid:enableOnBackInvokedCallback="true"যোগ করুন:<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:enableOnBackInvokedCallback="true" android:theme="@style/Theme.Snippets">