اضافه کردن پشتیبانی از انیمیشن های پیشگویانه

هنگام استفاده از APIهای سیستم، می‌توانید انیمیشن‌های درون‌برنامه‌ای را دریافت کنید و از انتقال‌های سفارشی پشتیبانی کنید.

ویدیوی ۱: انیمیشن‌های پیش‌بینی‌کننده‌ی بازگشت

پس از انتخاب، برنامه شما انیمیشن‌هایی را برای بازگشت به خانه، فعالیت‌های متقابل و وظایف متقابل نمایش می‌دهد.

این ویدیو نمونه‌ی کوتاهی از انیمیشن‌های پیش‌بینی‌کننده‌ی بازگشت برای فعالیت‌های متقابل و بازگشت به خانه با استفاده از برنامه‌ی تنظیمات اندروید را نشان می‌دهد.

  1. در این انیمیشن، کاربر برای بازگشت به صفحه تنظیمات قبلی، انگشت خود را به عقب می‌کشد - نمونه‌ای از یک انیمیشن میان‌فعالیتی.
  2. حالا در صفحه قبلی، کاربر برای بار دوم شروع به کشیدن انگشت به عقب می‌کند و پیش‌نمایشی از صفحه اصلی به همراه تصویر زمینه آن را نشان می‌دهد - نمونه‌ای از انیمیشن بازگشت به خانه.
  3. کاربر همچنان به سمت راست سوایپ می‌کند و انیمیشنی از کوچک شدن پنجره به سمت آیکون روی صفحه اصلی نمایش داده می‌شود.
  4. کاربر اکنون به طور کامل به صفحه اصلی بازگشته است.

درباره نحوه افزودن پشتیبانی از حرکات پیش‌بینی‌کننده بازگشت بیشتر بدانید.

اضافه کردن انتقال‌ها و انیمیشن‌های سفارشی درون برنامه‌ای

شما می‌توانید انیمیشن‌ها و انتقال‌های سفارشی درون‌برنامه‌ای، انیمیشن‌های سفارشی بین‌فعالیتی و انیمیشن‌های سفارشی بین‌قطعه‌ای با حرکات پیش‌بینی‌کننده‌ی بازگشت ایجاد کنید.

انتقال‌های سفارشی را در Jetpack Compose اضافه کنید

شما می‌توانید از PredictiveBackHandler برای مدیریت حرکات پیش‌بینی‌کننده‌ی بازگشت در Jetpack Compose و ایجاد انتقال‌های درون‌برنامه‌ای سفارشی استفاده کنید. این ویژگی در androidx.activity:activity-compose:1.8.0-alpha01 یا بالاتر موجود است.

PredictiveBackHandler یک لامبدا فراخوانی ارائه می‌دهد که یک Flow<BackEventCompat> را در معرض نمایش قرار می‌دهد که رویدادها را هنگام کشیدن انگشت کاربر از لبه به عقب منتشر می‌کند. این رویدادها اطلاعاتی در مورد موقعیت لمس کاربر، لبه کشیدن انگشت و از همه مهم‌تر progress ارائه می‌دهند که می‌تواند برای متحرک‌سازی اجزا به عنوان بخشی از مدیریت حرکت برگشت استفاده شود.

قطعه کد زیر مثالی از استفاده از PredictiveBackHandler برای متحرک‌سازی یک Surface با حرکت اشاره‌ای و کوچک و دور شدن از آن را نشان می‌دهد:

@Composable
fun DetailScreen(onBack: () -> Unit) {
    var scale by remember { mutableFloatStateOf(1f) }
    var xOffset by remember { mutableFloatStateOf(0f) }
    val scope = rememberCoroutineScope()

    PredictiveBackHandler { progressFlow ->
        try {
            progressFlow.collectLatest { backEvent ->
                scale = 1f - backEvent.progress
                xOffset = backEvent.progress * 100f
            }
            // User completed gesture
            onBack()
        } catch (e: CancellationException) {
            // User cancelled gesture
            // Animate scale and xOffset back to 1f and 0f respectively
            scope.launch {
                animate(scale, 1f) { value, _ -> scale = value }
            }
            scope.launch {
                animate(xOffset, 0f) { value, _ -> xOffset = value }
            }
        }
    }
    Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
        Surface(
            modifier = Modifier
                .size(200.dp)
                .scale(scale)
                .offset(x = xOffset.dp, y = 0.dp),
            color = Color.Blue
        ) {}
    }
}