نقل طرق العرض باستخدام صورة متحركة سريعة

تجربة ميزة "الكتابة"
Jetpack Compose هي مجموعة أدوات واجهة المستخدم التي ننصح بها لنظام التشغيل Android. تعرَّف على كيفية استخدام الصور المتحركة في ميزة "الكتابة".

تستخدم الرسوم المتحركة القائمة على قذف قوة احتكاك تتناسب مع بسرعة الكائن. ويمكنك استخدامه لتحريك خاصية كائن لإنهاء الرسوم المتحركة تدريجيًا. ولديه زخم أولي، وهو يتم الحصول عليها غالبًا من سرعة الإيماءة، فتبطئ تدريجيًا. تشير رسالة الأشكال البيانية تنتهي الرسوم المتحركة عندما تكون سرعة الرسوم المتحركة منخفضة بدرجة كافية أنه لا يحدث أي تغيير مرئي على شاشة الجهاز.

الشكل 1. مؤثرات حركية سريعة

للاطّلاع على مواضيع ذات صلة، يُرجى قراءة الأدلة التالية:

إضافة مكتبة AndroidX

لاستخدام الصور المتحركة المستندة إلى الفيزياء، يجب إضافة مكتبة AndroidX إلى مشروعك. على النحو التالي:

  1. افتح ملف build.gradle الخاص بوحدة تطبيقك.
  2. أضِف مكتبة AndroidX إلى قسم dependencies.

    رائع

            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() وتمرير البيانات. السرعة بالبكسل في الثانية. تُعرِض الطريقة عنصر الرمي الذي تم ضبط السرعة عليه.

ملاحظة: استخدِم GestureDetector.OnGestureListener و VelocityTracker صفوف للاسترداد والاحتساب سرعة إيماءات اللمس، على التوالي.

ضبط نطاق لقيمة الصورة المتحركة

يمكنك ضبط الحد الأدنى والحد الأقصى لقيم الصور المتحركة عندما تريد الحد من قيمة السمة إلى نطاق معيّن. عنصر التحكم في النطاق هذا عندما يكون هناك تأثيرات متحركة لخصائص نطاق، مثل ألفا (من 0 إلى 1).

ملاحظة: عندما تصل قيمة تأثير التحريك السريع إلى الحد الأدنى أو الأقصى، ينتهي التأثير المتحرك.

لضبط الحد الأدنى والأقصى للقيم، يمكنك طلب setMinValue(). وsetMaxValue() على التوالي. تُعيد كلتا الطريقتَين عنصر الرسم المتحرّك الذي ضبطت القيمة له.

ضبط مدى الاحتكاك

تتيح لك الطريقة setFriction() تغيير الصورة المتحركة احتكاك. يحدد مدى سرعة انخفاض السرعة في الرسوم المتحركة.

ملاحظة: إذا لم تحدد المعوقات في بداية الرسوم المتحركة، تستخدم الرسوم المتحركة قيمة احتكاك افتراضية 1.

تُرجع الطريقة الكائن الذي تستخدم صورته المتحركة قيمة الاحتكاك التي التي تقدمها.

نموذج التعليمات البرمجية

يوضّح المثال التالي انحدارًا أفقيًا. السرعة التي تم رصدها من تتبُّع السرعة هي velocityX، وتم ضبط حدود التمرير على 0 و maxScroll. تم ضبط معامل الاحتكاك على 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 لأنّ مقياس الحد الأدنى للتغيير المرئي يتم استخراجه من السمة. مثلاً:

  • الحدّ الأدنى التلقائي للتغيير المرئي هو بكسل واحد لسمات العرض، مثل 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 بكسل.