تستخدم الرسوم المتحركة القائمة على قذف قوة احتكاك تتناسب مع بسرعة الكائن. ويمكنك استخدامه لتحريك خاصية كائن لإنهاء الرسوم المتحركة تدريجيًا. ولديه زخم أولي، وهو يتم الحصول عليها غالبًا من سرعة الإيماءة، فتبطئ تدريجيًا. تشير رسالة الأشكال البيانية تنتهي الرسوم المتحركة عندما تكون سرعة الرسوم المتحركة منخفضة بدرجة كافية أنه لا يحدث أي تغيير مرئي على شاشة الجهاز.
![](https://developer.android.com/static/images/guide/topics/graphics/fling-animation.gif?authuser=9&hl=ar)
للتعرّف على مواضيع ذات صلة، اطّلِع على الأدلة التالية:
إضافة مكتبة AndroidX
لاستخدام الصور المتحركة المستندة إلى الفيزياء، يجب إضافة مكتبة AndroidX إلى مشروعك. على النحو التالي:
- افتح ملف
build.gradle
الخاص بوحدة تطبيقك. - إضافة مكتبة AndroidX إلى قسم
dependencies
Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
إنشاء صورة متحركة متحرّكة
تتيح لك الفئة FlingAnimation
إنشاء
صورة متحركة سريعة لأحد العناصر. لإنشاء رسم متحرك متنقّل، أنشئ
مثيل لفئة FlingAnimation
توفير كائن وخاصية الكائن الذي تريد تحريكه.
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
ضبط السرعة
تحدد سرعة البدء السرعة التي تحدد بها خاصية الرسوم المتحركة تتغير في بداية الرسوم المتحركة. سرعة البدء الافتراضية هي يتم تعيينها على صفر بكسل في الثانية. وبالتالي، يجب عليك تحديد سرعة البدء. لضمان عدم انتهاء الرسوم المتحركة على الفور.
يمكنك استخدام قيمة ثابتة كسرعة البداية، أو يمكنك إسنادها سرعة إيماءة اللمس. إذا اخترت تقديم قيمة ثابتة، يجب تحديد القيمة بالبكسل في الثانية، ثم تحويلها إلى وحدات بكسل في الثانية يتيح تحديد القيمة بوحدات بكسل مستقلة الكثافة في الثانية بشكل مستقل عن كثافة الجهاز وعوامل الشكل. لمزيد من المعلومات عن تحويل السرعة الأولية إلى وحدات بكسل في الثانية، راجع التحويل قسم dp في الثانية إلى بكسل في الثانية في Spring Animation:
لضبط السرعة، عليك استدعاء طريقة setStartVelocity()
وتمرير البيانات.
السرعة بالبكسل في الثانية. تُرجع الطريقة كائن fling على
التي يتم تعيينها.
ملاحظة: استخدِم
GestureDetector.OnGestureListener
و
VelocityTracker
صفوف للاسترداد والاحتساب
سرعة إيماءات اللمس، على التوالي.
ضبط نطاق لقيمة الصورة المتحركة
يمكنك ضبط الحد الأدنى والأقصى لقيم الرسوم المتحركة عندما تريد تقييد قيمة الخاصية إلى نطاق معين. عنصر التحكم في النطاق هذا عندما يكون هناك تأثيرات متحركة لخصائص نطاق، مثل ألفا (من 0 إلى 1).
ملاحظة: عندما تصل قيمة الحركة المتدفقة إلى قيمة الحد الأدنى أو الأقصى، تنتهي الرسوم المتحركة.
لضبط الحد الأدنى والأقصى للقيم، يمكنك طلب setMinValue()
.
وsetMaxValue()
على التوالي.
تُرجع كلتا الطريقتين كائن الرسوم المتحركة الذي تم تعيين القيمة له.
ضبط مدى الاحتكاك
تتيح لك الطريقة setFriction()
تغيير الصورة المتحركة
احتكاك. يحدد مدى سرعة انخفاض السرعة في الرسوم المتحركة.
ملاحظة: إذا لم تحدد المعوقات في بداية الرسوم المتحركة، تستخدم الرسوم المتحركة قيمة احتكاك افتراضية 1.
تُرجع الطريقة الكائن الذي تستخدم صورته المتحركة قيمة الاحتكاك التي التي تقدمها.
نموذج التعليمات البرمجية
يوضح المثال التالي انحدارًا أفقيًا. السرعة التي تم الحصول عليها من
أداة تتبُّع السرعة هي velocityX
، وحدود التمرير
تم ضبطها على 0 و
الحد الأقصى للتمرير. تم ضبط قيمة الاحتكاك على 1.1.
Kotlin
FlingAnimation(view, DynamicAnimation.SCROLL_X).apply { setStartVelocity(-velocityX) setMinValue(0f) setMaxValue(maxScroll) friction = 1.1f start() }
Java
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()
واجتياز أي منهما
أحد أدنى الثوابت المرئية أو إحدى القيم التي تحتاج إلى حسابها
لخاصية مخصصة. لمزيد من المعلومات حول حساب هذه القيمة،
يُرجى الرجوع إلى
احتساب الحد الأدنى لقيمة التغيير المرئية
.
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
ملاحظة: يجب تمرير قيمة فقط عند تحريك لخاصية مخصصة لم يتم تعريفها بالبكسل.
جارٍ حساب الحد الأدنى لقيمة التغيير المرئية
لحساب الحد الأدنى لقيمة التغيير المرئية لموقع مخصّص، استخدِم المعادلة التالية:
الحد الأدنى للتغيير المرئي = نطاق قيمة الخاصية المخصصة / نطاق الرسوم المتحركة بالبكسل
على سبيل المثال، ينتقل الموقع الذي تريد تحريكه من 0 إلى 100. ويتجاوب هذا مع تغيير بمقدار 200 بكسل. وفقًا للمعادلة، يكون الحد الأدنى قيمة التغيير المرئية 100 / 200 تساوي 0.5 بكسل.