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

برای آشنایی با موضوعات مرتبط، راهنماهای زیر را مطالعه کنید:
کتابخانه AndroidX را اضافه کنید
برای استفاده از انیمیشن های مبتنی بر فیزیک، باید کتابخانه AndroidX را به صورت زیر به پروژه خود اضافه کنید:
- فایل
build.gradle
را برای ماژول برنامه خود باز کنید. - کتابخانه 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 در ثانیه به سرعت اجازه می دهد تا مستقل از چگالی و عوامل شکل دستگاه باشد. For more information about converting the starting velocity to pixels per second, refer to the Converting dp per second to pixels per second section in Spring Animation .
برای تنظیم سرعت، متد setStartVelocity()
را فراخوانی کنید و سرعت را بر حسب پیکسل بر ثانیه ارسال کنید. متد شیء پرتابی را که سرعت روی آن تنظیم شده است، برمی گرداند.
توجه: از کلاسهای GestureDetector.OnGestureListener
و VelocityTracker
به ترتیب برای بازیابی و محاسبه سرعت حرکات لمسی استفاده کنید.
محدوده مقدار انیمیشن را تنظیم کنید
هنگامی که می خواهید مقدار ویژگی را در محدوده خاصی محدود کنید، می توانید حداقل و حداکثر مقادیر انیمیشن را تنظیم کنید. این کنترل محدوده مخصوصاً زمانی مفید است که ویژگیهایی را متحرک کنید که دارای محدوده ذاتی هستند، مانند آلفا (از 0 تا 1).
توجه : هنگامی که ارزش یک انیمیشن پرتاب به حداقل یا حداکثر مقدار برسد، انیمیشن به پایان می رسد.
To set the minimum and maximum values, call the setMinValue()
and setMaxValue()
methods, respectively. هر دو روش شیء انیمیشنی را که مقدار را برای آن تعیین کرده اید برمی گرداند.
اصطکاک را تنظیم کنید
متد 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
نیازی به فراخوانی این متد نیست زیرا حداقل تغییر قابل مشاهده از ویژگی مشتق شده است. به عنوان مثال:
- The default minimum visible change value is 1 pixel for view properties such as
TRANSLATION_X
,TRANSLATION_Y
,TRANSLATION_Z
,SCROLL_X
, andSCROLL_Y
. - For animations that use rotation, such as
ROTATION
,ROTATION_X
, andROTATION_Y
, the minimum visible change isMIN_VISIBLE_CHANGE_ROTATION_DEGREES
, or 1/10 pixel. - For animations that use opacity, the minimum visible change is
MIN_VISIBLE_CHANGE_ALPHA
, or 1/256.
برای تنظیم حداقل تغییر قابل مشاهده برای یک انیمیشن، متد setMinimumVisibleChange()
را فراخوانی کنید و یکی از حداقل های ثابت قابل مشاهده یا مقداری را که باید برای یک ویژگی سفارشی محاسبه کنید، ارسال کنید. برای اطلاعات بیشتر در مورد محاسبه این مقدار، به بخش محاسبه حداقل مقدار تغییر قابل مشاهده مراجعه کنید.
کاتلین
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
جاوا
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
توجه : فقط زمانی باید یک مقدار را ارسال کنید که یک ویژگی سفارشی را متحرک کنید که در پیکسل تعریف نشده باشد.
محاسبه حداقل مقدار تغییر قابل مشاهده
برای محاسبه حداقل مقدار تغییر قابل مشاهده برای یک ویژگی سفارشی، از فرمول زیر استفاده کنید:
حداقل تغییر قابل مشاهده = محدوده ارزش ویژگی سفارشی / محدوده انیمیشن در پیکسل
به عنوان مثال، خاصیتی که می خواهید متحرک سازی کنید از 0 به 100 پیشرفت می کند. این مربوط به یک تغییر 200 پیکسلی است. طبق فرمول، حداقل مقدار تغییر قابل مشاهده 100 / 200 برابر با 0.5 پیکسل است.