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

روش Compose را امتحان کنید
Jetpack Compose جعبه ابزار UI توصیه شده برای اندروید است. نحوه استفاده از انیمیشن ها در Compose را بیاموزید.

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

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

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

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

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

  1. فایل build.gradle برای ماژول برنامه خود باز کنید.
  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 مراجعه کنید.

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

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

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

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

توجه : هنگامی که ارزش یک انیمیشن پرتاب به حداقل یا حداکثر مقدار برسد، انیمیشن به پایان می رسد.

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

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

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

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

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

کد نمونه

مثال زیر یک پرتاب افقی را نشان می دهد. سرعتی که از ردیاب سرعت گرفته می شود velocityX است و کران های اسکرول روی 0 و maxScroll تنظیم می شوند. اصطکاک روی 1.1 تنظیم شده است.

کاتلین

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 نیازی به فراخوانی این متد نیست زیرا حداقل تغییر قابل مشاهده از ویژگی مشتق شده است. به عنوان مثال:

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

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

کاتلین

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

جاوا

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

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

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

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

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

به عنوان مثال، خاصیتی که می خواهید متحرک سازی کنید از 0 به 100 پیشرفت می کند. این مربوط به یک تغییر 200 پیکسلی است. طبق فرمول، حداقل مقدار تغییر قابل مشاهده 100 / 200 برابر با 0.5 پیکسل است.