نماها را با استفاده از انیمیشن پرت کردن حرکت دهید

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه از انیمیشن‌ها در Compose استفاده کنید.

انیمیشن مبتنی بر Fling از نیروی اصطکاکی استفاده می‌کند که متناسب با سرعت جسم است. از آن برای متحرک‌سازی یک ویژگی از یک جسم و پایان تدریجی انیمیشن استفاده کنید. این نوع انیمیشن یک تکانه اولیه دارد که بیشتر از سرعت حرکت دریافت می‌شود و به تدریج کند می‌شود. انیمیشن زمانی به پایان می‌رسد که سرعت انیمیشن به اندازه‌ای کم باشد که هیچ تغییر قابل مشاهده‌ای در صفحه دستگاه ایجاد نکند.

شکل ۱. انیمیشن Fling

برای آشنایی با مباحث مرتبط، راهنماهای زیر را مطالعه کنید:

کتابخانه AndroidX را اضافه کنید

برای استفاده از انیمیشن‌های مبتنی بر فیزیک، باید کتابخانه AndroidX را به صورت زیر به پروژه خود اضافه کنید:

  1. فایل build.gradle مربوط به ماژول app خود را باز کنید.
  2. کتابخانه AndroidX را به بخش dependencies اضافه کنید.

    گرووی

            dependencies {
                implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
            }
            

    کاتلین

            dependencies {
                implementation("androidx.dynamicanimation:dynamicanimation:1.0.0")
            }
            

یک انیمیشن پرتابی ایجاد کنید

کلاس FlingAnimation به شما امکان می‌دهد برای یک شیء، یک انیمیشن fling ایجاد کنید. برای ساخت یک انیمیشن fling، یک نمونه از کلاس FlingAnimation ایجاد کنید و یک شیء و ویژگی شیء که می‌خواهید متحرک‌سازی کنید را ارائه دهید.

کاتلین

val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)

جاوا

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);

سرعت را تنظیم کنید

سرعت شروع، سرعتی را تعریف می‌کند که یک ویژگی انیمیشن در ابتدای انیمیشن با آن تغییر می‌کند. سرعت شروع پیش‌فرض روی صفر پیکسل در ثانیه تنظیم شده است. بنابراین، شما باید یک سرعت شروع تعریف کنید تا مطمئن شوید که انیمیشن فوراً تمام نمی‌شود.

می‌توانید از یک مقدار ثابت به عنوان سرعت شروع استفاده کنید، یا می‌توانید آن را بر اساس سرعت یک حرکت لمسی تنظیم کنید. اگر تصمیم به ارائه یک مقدار ثابت دارید، باید مقدار را بر حسب dp در ثانیه تعریف کنید، سپس آن را به پیکسل در ثانیه تبدیل کنید. تعریف مقدار بر حسب dp در ثانیه باعث می‌شود سرعت مستقل از چگالی و فاکتورهای فرم دستگاه باشد. برای اطلاعات بیشتر در مورد تبدیل سرعت شروع به پیکسل در ثانیه، به بخش تبدیل dp در ثانیه به پیکسل در ثانیه در Spring Animation مراجعه کنید.

برای تنظیم سرعت، متد setStartVelocity() را فراخوانی کرده و سرعت را بر حسب پیکسل در ثانیه به آن ارسال کنید. این متد، شیء fling را که سرعت روی آن تنظیم شده است، برمی‌گرداند.

نکته: از کلاس‌های GestureDetector.OnGestureListener و VelocityTracker به ترتیب برای بازیابی و محاسبه سرعت حرکات لمسی استفاده کنید.

تنظیم محدوده مقادیر انیمیشن

وقتی می‌خواهید مقدار ویژگی را به یک محدوده خاص محدود کنید، می‌توانید حداقل و حداکثر مقادیر انیمیشن را تنظیم کنید. این کنترل محدوده به ویژه زمانی مفید است که ویژگی‌هایی را که دارای محدوده ذاتی هستند، مانند آلفا (از 0 تا 1)، متحرک‌سازی می‌کنید.

نکته : وقتی مقدار یک انیمیشن fling به حداقل یا حداکثر مقدار خود برسد، انیمیشن پایان می‌یابد.

برای تنظیم حداقل و حداکثر مقادیر، به ترتیب متدهای setMinValue() و setMaxValue() را فراخوانی کنید. هر دو متد، شیء انیمیشنی را که برای آن مقدار تعیین کرده‌اید، برمی‌گردانند.

اصطکاک را تنظیم کنید

متد setFriction() به شما امکان می‌دهد اصطکاک انیمیشن را تغییر دهید. این متد مشخص می‌کند که سرعت در یک انیمیشن با چه سرعتی کاهش یابد.

نکته : اگر در ابتدای انیمیشن مقدار اصطکاک را تنظیم نکنید، انیمیشن از مقدار اصطکاک پیش‌فرض ۱ استفاده می‌کند.

این متد، شیئی را برمی‌گرداند که انیمیشن آن از مقدار اصطکاکی که شما ارائه می‌دهید استفاده می‌کند.

کد نمونه

مثال زیر یک پرتاب افقی را نشان می‌دهد. سرعت ثبت شده از ردیاب سرعت، velocityX است و محدودیت‌های اسکرول روی ۰ و maxScroll تنظیم شده‌اند. اصطکاک روی ۱.۱ تنظیم شده است.

کاتلین

FlingAnimation(view, DynamicAnimation.SCROLL_X).apply {
    setStartVelocity(-velocityX)
    setMinValue(0f)
    setMaxValue(maxScroll)
    friction = 1.1f
    start()
}

جاوا

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
fling.setStartVelocity(-velocityX)
        .setMinValue(0)
        .setMaxValue(maxScroll)
        .setFriction(1.1f)
        .start();

حداقل تغییر قابل مشاهده را تنظیم کنید

وقتی یک ویژگی سفارشی را که بر حسب پیکسل تعریف نشده است، متحرک می‌کنید، باید حداقل تغییر مقدار انیمیشن را که برای کاربران قابل مشاهده است، تنظیم کنید. این مقدار، آستانه معقولی را برای پایان انیمیشن تعیین می‌کند.

هنگام متحرک‌سازی DynamicAnimation.ViewProperty نیازی به فراخوانی این متد نیست، زیرا حداقل تغییر قابل مشاهده از آن ویژگی مشتق می‌شود. برای مثال:

  • حداقل مقدار تغییر قابل مشاهده پیش‌فرض برای ویژگی‌های نمایشی مانند TRANSLATION_X ، TRANSLATION_Y ، TRANSLATION_Z ، SCROLL_X و SCROLL_Y ، ۱ پیکسل است.
  • برای انیمیشن‌هایی که از چرخش استفاده می‌کنند، مانند ROTATION ، ROTATION_X و ROTATION_Y ، حداقل تغییر قابل مشاهده MIN_VISIBLE_CHANGE_ROTATION_DEGREES یا ۱/۱۰ پیکسل است.
  • برای انیمیشن‌هایی که از opacity استفاده می‌کنند، حداقل تغییر قابل مشاهده MIN_VISIBLE_CHANGE_ALPHA یا ۱/۲۵۶ است.

برای تنظیم حداقل تغییر قابل مشاهده برای یک انیمیشن، متد setMinimumVisibleChange() را فراخوانی کنید و یکی از حداقل ثابت‌های قابل مشاهده یا مقداری را که برای محاسبه یک ویژگی سفارشی نیاز دارید، به آن منتقل کنید. برای اطلاعات بیشتر در مورد محاسبه این مقدار، به بخش محاسبه حداقل مقدار تغییر قابل مشاهده مراجعه کنید.

کاتلین

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

جاوا

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

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

محاسبه حداقل مقدار تغییر قابل مشاهده

برای محاسبه حداقل مقدار تغییر قابل مشاهده برای یک ویژگی سفارشی، از فرمول زیر استفاده کنید:

حداقل تغییر قابل مشاهده = محدوده مقدار ویژگی سفارشی / محدوده انیمیشن بر حسب پیکسل

برای مثال، ویژگی‌ای که می‌خواهید متحرک‌سازی کنید از ۰ تا ۱۰۰ تغییر می‌کند. این مربوط به تغییر ۲۰۰ پیکسلی است. طبق فرمول، حداقل مقدار تغییر قابل مشاهده ۱۰۰ / ۲۰۰ برابر با ۰.۵ پیکسل است.