موارد الصور المتحركة

يمكن لمورد الرسوم المتحركة تحديد نوع من نوعين من الرسوم المتحركة:

الصور المتحركة في الموقع
يتم إنشاء صورة متحركة عن طريق تعديل قيم سمة العنصر خلال فترة محدّدة باستخدام Animator.
عرض الصورة المتحركة

هناك نوعان من الرسوم المتحركة التي يمكنك تنفيذها باستخدام إطار عمل الرسوم المتحركة للعرض:

مؤثرات حركية للموقع

صورة متحركة يتم تحديدها في XML تعدِّل خصائص العنصر المستهدف، مثل لون الخلفية أو قيمة ألفا، خلال فترة زمنية محددة.

موقع الملف:
res/animator/filename.xml
يتم استخدام اسم الملف كرقم تعريف المورد.
نوع بيانات المورد المجمّع:
مؤشر المورد إلى ValueAnimator أو ObjectAnimator أو AnimatorSet
مرجع للموارد:
في الرموز البرمجية المستندة إلى JavaScript أو لغة Kotlin: R.animator.filename
في ملف XML: @[package:]animator/filename
بناء الجملة:
<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

يجب أن يحتوي الملف على عنصر جذر واحد: إما <set> أو <objectAnimator> أو <valueAnimator>. يمكنك تجميع عناصر الرسوم المتحركة معًا داخل العنصر <set>، بما في ذلك عناصر <set> الأخرى.

العناصر:
<set>
حاوية تحتوي على عناصر أخرى للصور المتحركة (<objectAnimator> أو <valueAnimator> أو عناصر <set> أخرى). ويمثّل AnimatorSet.

يمكنك تحديد علامات <set> مدمَجة لإضافة المزيد من الصور المتحركة المجمّعة. ويمكن لكل <set> تحديد سمة ordering الخاصة بها.

السمات:

android:ordering
الكلمة الرئيسية: تحدد هذه المجموعة ترتيب تشغيل الصور المتحركة في هذه المجموعة.
القيمةالوصف
sequentiallyتشغيل الصور المتحركة في هذه المجموعة بالتسلسل.
together (تلقائي)يمكنك تشغيل الصور المتحركة في هذه المجموعة في الوقت نفسه.
<objectAnimator>
تحريك خاصية معيّنة لكائن خلال فترة زمنية محددة. ويمثّل ObjectAnimator.

السمات:

android:propertyName
سلسلة: مَعلمة مطلوبة. خاصية الكائن للتحريك، ويُشار إليها باسمه. على سبيل المثال، يمكنك تحديد "alpha" أو "backgroundColor" للعنصر View. لا يعرض العنصر objectAnimator السمة target، لذلك لا يمكنك ضبط الكائن لتحريكه في إعلان XML. يجب تضخيم مورد XML للصور المتحركة من خلال استدعاء loadAnimator()، واستدعاء setTarget() لضبط الكائن المستهدف الذي يحتوي على هذه السمة.
android:valueTo
عدد عائم أو عدد صحيح أو لون. مَعلمة مطلوبة. القيمة التي تنتهي عندها خاصية الصور المتحركة. ويتم تمثيل الألوان في صورة أرقام سداسية عشرية مكوَّنة من ستة أرقام، مثل #333333.
android:valueFrom
عدد عائم أو عدد صحيح أو لون. القيمة التي تبدأ منها الخاصية المتحركة. وفي حال عدم تحديد هذه السمة، تبدأ الصورة المتحركة بالقيمة التي تم الحصول عليها من خلال طريقة get الخاصة بالموقع الإلكتروني. ويتم تمثيل الألوان في صورة أرقام سداسية عشرية مكوَّنة من ستة أرقام، مثل #333333.
android:duration
int. الوقت بالملي ثانية من الحركة. 300 مللي ثانية هو القيمة الافتراضية.
android:startOffset
int. تشير هذه القيمة إلى مقدار الملي ثانية الذي يتم استدعاؤه من خلال الحركة بعد start().
android:repeatCount
int: عدد مرات تكرار صورة متحركة. اضبط القيمة على "-1" على تكرار لا نهائي أو على عدد صحيح موجب. على سبيل المثال، تعني القيمة "1" أنّه يتم تكرار الصورة المتحركة مرة واحدة بعد التشغيل الأولي لها، وبالتالي يتم تشغيل الصورة المتحركة مرتين. القيمة التلقائية هي "0"، ما يعني عدم تكرار.
android:repeatMode
int: آلية عمل الصورة المتحركة عند وصولها إلى نهاية الصورة المتحركة. يجب ضبط السمة android:repeatCount على عدد صحيح موجب أو "-1" لكي يكون لهذه السمة تأثير. اضبط القيمة على "reverse" للحصول على اتجاه عكسي للصورة المتحركة مع كل تكرار أو على "restart" لإتاحة التكرار من البداية في كل مرة.
android:valueType
الكلمة الرئيسية: لا تحدّد هذه السمة إذا كانت القيمة عبارة عن لون. يعالج إطار عمل الصور المتحركة تلقائيًا قيم الألوان.
القيمةالوصف
intTypeتحدّد هذه السمة أنّ القيم المتحركة هي أعداد صحيحة.
floatType (تلقائي)تحدّد هذه السمة أنّ القيم المتحركة هي أعداد عشرية.
<animator>
تنفيذ حركة في مدة زمنية محددة يمثّل ValueAnimator.

السمات:

android:valueTo
عدد عائم أو عدد صحيح أو لون. مَعلمة مطلوبة. القيمة التي تنتهي عندها الصورة المتحركة. ويتم تمثيل الألوان في صورة أرقام سداسية عشرية مكوَّنة من ستة أرقام، مثل #333333.
android:valueFrom
عدد عائم أو عدد صحيح أو لون. مَعلمة مطلوبة. القيمة التي تبدأ عندها الصورة المتحركة. ويتم تمثيل الألوان في صورة أرقام سداسية عشرية مكوَّنة من ستة أرقام، مثل #333333.
android:duration
int. الوقت بالملي ثانية من الحركة. 300 ملي ثانية هو القيمة التلقائية.
android:startOffset
int. تشير هذه القيمة إلى مقدار الملي ثانية الذي يتم استدعاؤه من خلال الحركة بعد start().
android:repeatCount
int: عدد مرات تكرار صورة متحركة. اضبط القيمة على "-1" على تكرار لا نهائي أو على عدد صحيح موجب. على سبيل المثال، تعني القيمة "1" أنّه يتم تكرار الصورة المتحركة مرة واحدة بعد التشغيل الأولي لها، وبالتالي يتم تشغيل الصورة المتحركة مرتين. القيمة التلقائية هي "0"، ما يعني عدم تكرار.
android:repeatMode
int: آلية عمل الصورة المتحركة عند وصولها إلى نهاية الصورة المتحركة. يجب ضبط السمة android:repeatCount على عدد صحيح موجب أو "-1" لكي يكون لهذه السمة تأثير. اضبط القيمة على "reverse" للحصول على اتجاه عكسي للصورة المتحركة مع كل تكرار أو على "restart" لإتاحة التكرار من البداية في كل مرة.
android:valueType
الكلمة الرئيسية: لا تحدّد هذه السمة إذا كانت القيمة عبارة عن لون. يعالج إطار عمل الصور المتحركة تلقائيًا قيم الألوان.
القيمةالوصف
intTypeتحدّد هذه السمة أنّ القيم المتحركة هي أعداد صحيحة.
floatType (تلقائي)تحدّد هذه السمة أنّ القيم المتحركة هي أعداد عشرية.
مثلا:

ملف XML تم حفظه في res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

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

Kotlin

val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
    .apply {
        setTarget(myObject)
        start()
    }

Java

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();
راجِع أيضًا:

عرض الصورة المتحركة

يتوافق إطار عمل الصور المتحركة للعرض مع الرسوم المتحركة التي يتم عرضها عند المراهقة أو كل إطار على حدة، والتي يتم تعريفها بتنسيق XML. توضّح الأقسام التالية كيفية استخدام كلتا الطريقتين.

رسوم متحركة للمراهقين

يشير ذلك المصطلح إلى صورة متحركة يتم تحديدها في XML وتنفّذ انتقالات على أحد الرسومات مثل التدوير والتلاشي والحركة والتمديد.

موقع الملف:
res/anim/filename.xml
يتم استخدام اسم الملف كرقم تعريف المورد.
نوع بيانات المورد المجمّع:
مؤشر المرجع على Animation
مرجع للموارد:
في لغة Java: R.anim.filename
في ملف XML: @[package:]anim/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

يجب أن يحتوي الملف على عنصر جذر واحد: إما عنصر <alpha> أو <scale> أو <translate> أو <rotate> أو <set> يحتوي على مجموعة (أو مجموعات) من عناصر الرسوم المتحركة الأخرى (بما في ذلك عناصر <set> المدمجة).

العناصر:
<set>
حاوية تتضمن عناصر رسوم متحركة أخرى (<alpha> أو <scale> أو <translate> أو <rotate>) أو عناصر <set> أخرى يمثّل AnimationSet.

السمات:

android:interpolator
مرجع أداة التتبُّع تمثّل هذه السمة Interpolator لتطبيقه على الصورة المتحركة. يجب أن تكون القيمة مرجعًا لمورد يحدّد أداة الاستيفاء، وليست اسم فئة جهاز الاستيفاء. وتتوفّر الموارد التلقائية لأداة الاستيفاء التلقائي من المنصة أو يمكنك إنشاء موردك الخاص بأداة الاستيفاء. راجِع المناقشة التالية للحصول على مزيد من المعلومات عن المستنِدة إلى الوسط.
android:shareInterpolator
منطقية "true" إذا كنت تريد مشاركة أداة الاستيفاء نفسها بين كل العناصر الثانوية.
<alpha>
صورة متحركة تظهر فيها تدريجية باستخدام تأثير التلاشي أو التلاشي يمثّل AlphaAnimation.

السمات:

android:fromAlpha
التعويم: بدء إزاحة التعتيم، حيث يكون 0.0 شفافًا و1.0 معتمًا.
android:toAlpha
التعويم: إزاحة نهاية التعتيم، حيث يكون 0.0 شفافًا و1.0 معتمًا.

لمعرفة المزيد من السمات المتوافقة مع <alpha>، يمكنك الاطّلاع على مرجع الفئة Animation، الذي يتم اكتساب سمات XML الخاصة به من هذا العنصر.

<scale>
صورة متحركة لتغيير حجم الصورة يمكنك تحديد النقطة المركزية للصورة التي تنمو منها للخارج أو الداخل من خلال تحديد pivotX وpivotY. على سبيل المثال، إذا كانت هذه القيم هي 0,0 (الزاوية العلوية اليسرى)، فإن كل النمو يكون لأسفل ولليمين. يمثّل ScaleAnimation.

السمات:

android:fromXScale
التعويم: بدءًا من إزاحة الحجم X، حيث لا يكون هناك تغيير في 1.0.
android:toXScale
التعويم: إزاحة النهاية للحجم "X"، حيث لا يكون هناك تغيير في 1.0.
android:fromYScale
التعويم: بدء إزاحة الحجم Y، حيث لا يكون هناك تغيير في 1.0.
android:toYScale
التعويم: إزاحة نهاية الحجم Y، حيث لا يكون هناك تغيير في 1.0.
android:pivotX
التعويم: يظل الإحداثي X ثابتًا عند قياس الكائن.
android:pivotY
التعويم: يظل الإحداثي Y ثابتًا عند قياس الكائن.

لمعرفة المزيد من السمات المتوافقة مع <scale>، يمكنك الاطّلاع على مرجع الفئة Animation، الذي يتم اكتساب سمات XML الخاصة به من هذا العنصر.

<translate>
حركة عمودية و/أو أفقية. ويمثّل TranslateAnimation. يتيح استخدام السمات التالية بأي من هذه التنسيقات الثلاثة:
  • القيم من -100 إلى 100 تنتهي بـ "%"، ما يشير إلى نسبة نسبية إلى نفسه.
  • القيم من -100 إلى 100 تنتهي بـ "%p"، ما يشير إلى نسبة مئوية مرتبطة بالعنصر الرئيسي.
  • قيمة عائمة بدون لاحقة، تشير إلى قيمة مطلقة.

السمات:

android:fromXDelta
قيمة عائمة أو نسبة مئوية: جارٍ بدء الإزاحة X. معبرًا عنه بالبكسل بالنسبة إلى الموضع العادي، مثل "5"، أو بالنسبة المئوية بالنسبة إلى عرض العنصر، مثل "5%"، أو بالنسبة المئوية بالنسبة إلى العرض الرئيسي، مثل "5%p".
android:toXDelta
قيمة عائمة أو نسبة مئوية: نهاية الإزاحة X. معبرًا عنه بالبكسل بالنسبة إلى الموضع العادي، مثل "5"، أو بالنسبة المئوية بالنسبة إلى عرض العنصر، مثل "5%"، أو بالنسبة المئوية بالنسبة إلى العرض الرئيسي، مثل "5%p".
android:fromYDelta
قيمة عائمة أو نسبة مئوية: جارٍ بدء إزاحة Y. معبرًا عنها بالبكسل بالنسبة إلى الموضع العادي، مثل "5"، أو بالنسبة المئوية بالنسبة إلى ارتفاع العنصر، مثل "5%"، أو بالنسبة المئوية بالنسبة إلى ارتفاع العنصر الرئيسي، مثل "5%p".
android:toYDelta
قيمة عائمة أو نسبة مئوية: نهاية الإزاحة Y. معبرًا عنها بالبكسل بالنسبة إلى الموضع العادي، مثل "5"، أو بالنسبة المئوية بالنسبة إلى ارتفاع العنصر، مثل "5%"، أو بالنسبة المئوية بالنسبة إلى ارتفاع العنصر الرئيسي، مثل "5%p".

لمعرفة المزيد من السمات المتوافقة مع <translate>، يمكنك الاطّلاع على مرجع الفئة Animation، الذي يتم اكتساب سمات XML الخاصة به من هذا العنصر.

<rotate>
صورة متحركة لتدوير العنصر يمثّل RotateAnimation.

السمات:

android:fromDegrees
التعويم: بدء الموضع الزاوي، بالدرجات.
android:toDegrees
التعويم: موضع النهاية الزاوي، بالدرجات
android:pivotX
قيمة عائمة أو نسبة مئوية: الإحداثي X لمركز الدوران. ويتم التعبير عنها بالبكسل بالنسبة إلى الحافة اليسرى للكائن، مثل "5"، أو بالنسبة المئوية بالنسبة إلى الحافة اليسرى للكائن، مثل "5%"، أو بالنسبة المئوية بالنسبة إلى الحافة اليسرى للحاوية الرئيسية، مثل "5%p".
android:pivotY
قيمة عائمة أو نسبة مئوية: الإحداثي Y لمركز الدوران. ويتم التعبير عنها بالبكسل مقارنةً بالحافة العلوية للكائن، مثل "5"، أو بالنسبة المئوية بالنسبة للحافة العلوية للكائن، مثل "5%"، أو بالنسبة المئوية بالنسبة إلى الحافة العلوية للحاوية الرئيسية، مثل "5%p".

لمعرفة المزيد من السمات المتوافقة مع <rotate>، يمكنك الاطّلاع على مرجع الفئة Animation، الذي يتم اكتساب سمات XML الخاصة به من هذا العنصر.

مثلا:

ملف XML تم حفظه في res/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

يطبّق رمز التطبيق التالي الصورة المتحركة على ImageView ويبدأ الحركة:

Kotlin

val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image.startAnimation(hyperspaceJump)

Java

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
راجِع أيضًا:

مخترقون

أداة تبادل البيانات هي أداة تعديل للصور المتحركة يتم تعريفها في ملف XML وتؤثر في معدل التغيير في إحدى الصور المتحركة. ويتيح ذلك إمكانية تسريع تأثيرات الرسوم المتحركة الحالية أو إبطاءها أو تكرارها أو ارتدادها، وما إلى ذلك.

يتم تطبيق أداة الاستيفاء على عنصر الرسوم المتحركة الذي يتضمّن السمة android:interpolator، وتُعتبر قيمته مرجعًا لمورد أداة الاستيفاء.

جميع أنواع الكلمات الرئيسية المتوافقة مع التطبيق المتوفّرة على Android هي فئات فرعية من الفئة Interpolator. لكل فئة من فئات أداة الاستيفاء، يتضمّن Android موردًا عامًا يمكنك الرجوع إليه لتطبيق أداة الاستيفاء على صورة متحركة باستخدام السمة android:interpolator. يحدد الجدول التالي المورد المراد استخدامه لكل أداة إقراض:

فئة الإذعانمعرِّف المورد
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

وفي ما يلي كيفية تطبيق إحدى هذه الطرق باستخدام السمة android:interpolator:

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

أجهزة دمج مخصّصة

إذا لم تكن راضيًا عن أداة الاستيفاء التي توفرها المنصة، يمكنك إنشاء مورد مخصص من أداة الاستيفاء بسمات معدَّلة. على سبيل المثال، يمكنك ضبط معدّل التسارع في AnticipateInterpolator أو ضبط عدد الدورات لـ CycleInterpolator. للقيام بذلك، يمكنك إنشاء مورد الاستيفاء الخاص بك في ملف XML.

موقع الملف:
res/anim/filename.xml
يتم استخدام اسم الملف كرقم تعريف المورد.
نوع بيانات المورد المجمّع:
مؤشر المورد إلى كائن الاستيفاء المقابل
مرجع للموارد:
في ملف XML: @[package:]anim/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

إذا لم تطبِّق أي سمات، سيعمل الملخّص الخاص بك تمامًا كتلك التي توفّرها المنصة، والمذكورة في الجدول السابق.

العناصر:
ملاحظة: عند تحديد كل تطبيق Interpolator في ملف XML، يكون له اسم يبدأ بحرف صغير.

<accelerateDecelerateInterpolator>
يبدأ معدل التغيير وينتهي ببطء ولكنه يتسارع من المنتصف.

ما مِن سمات.

<accelerateInterpolator>
يبدأ معدّل التغيير ببطء، ثم يتسارع.

السمات:

android:factor
التعويم: معدّل التسارع. القيمة التلقائية هي 1.
<anticipateInterpolator>
يبدأ التغيير من الوراء ثم ينتقل للأمام.

السمات:

android:tension
التعويم: مقدار الشد المطلوب تطبيقه. والعدد التلقائي هو 2.
<anticipateOvershootInterpolator>
يبدأ التغيير للخلف، ثم ينتقل للأمام متجاوزًا القيمة المستهدفة، ثم يستقر عند القيمة النهائية.

السمات:

android:tension
التعويم: مقدار الشد المطلوب تطبيقه. والعدد التلقائي هو 2.
android:extraTension
التعويم: مقدار ضرب الشد به. القيمة التلقائية هي 1.5.
<bounceInterpolator>
يرتد التغيير في النهاية.

ما مِن سمات

<cycleInterpolator>
تكرار الصورة المتحركة لعدد محدد من الدورات. يتبع معدل التغيير نمطًا جيبيًا.

السمات:

android:cycles
عدد صحيح. عدد الدورات. القيمة التلقائية هي 1.
<decelerateInterpolator>
يبدأ معدّل التغيير سريعًا، ثم يتباطأ.

السمات:

android:factor
التعويم: معدل التباطؤ. القيمة التلقائية هي 1.
<linearInterpolator>
معدّل التغيّر ثابت.

ما مِن سمات.

<overshootInterpolator>
يتقدّم التغيير إلى الأمام ويتجاوز القيمة الأخيرة، ثم يعود إلى الهدف مرة أخرى.

السمات:

android:tension
التعويم: مقدار الشد المطلوب تطبيقه. والعدد التلقائي هو 2.
مثلا:

ملف XML تم حفظه في res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

يستخدم ملف XML في شكل رسوم متحركة هذا أداة الاستيفاء:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

إطار الصورة المتحركة

صورة متحركة يتم تحديدها في ملف XML وتعرض سلسلة من الصور بالترتيب، مثل فيلم.

موقع الملف:
res/drawable/filename.xml
يتم استخدام اسم الملف كرقم تعريف المورد.
نوع بيانات المورد المجمّع:
مؤشر المرجع على AnimationDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable.filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>
العناصر:
<animation-list>
مطلوبة. يجب أن يكون هذا هو العنصر الجذر. تحتوي على عنصر <item> واحد أو أكثر.

السمات:

android:oneshot
منطقية "true" إذا كنت تريد تنفيذ الحركة مرة واحدة، و"false" لتكرار الصورة المتحركة.
<item>
صورة متحركة لإطار واحد يجب أن يكون عنصرًا ثانويًا لعنصر <animation-list>.

السمات:

android:drawable
مورد قابل للرسم. العنصر القابل للرسم لاستخدامه مع هذا الإطار.
android:duration
عدد صحيح. المدة التي يتم خلالها عرض هذا الإطار بالمللي ثانية.
مثلا:

ملف XML تم حفظه في res/drawable/rocket_thrust.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

يضبط رمز التطبيق التالي الصورة المتحركة كخلفية View، ثم شغِّل الصورة المتحركة:

Kotlin

val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation.start()
}

Java

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}
راجِع أيضًا: