منبع پویانمایی میتواند یکی از دو نوع پویانمایی را تعریف کند:
- پویانمایی ویژگی
- با اصلاح کردن مقادیر ویژگی شیء در طول یک دوره مشخص با
Animator، پویانمایی ایجاد میکند. - مشاهده پویانمایی
-
دو نوع پویانمایی وجود دارد که میتوانید با چارچوب پویانمایی نما انجام دهید:
- پویانمایی بینابینی: پویانمایی را با انجام یک سری تبدیل روی یک تصویر با
Animationایجاد میکند. - پویانمایی قاب: پویانمایی را با نمایش توالی تصاویر بهترتیب با
AnimationDrawableایجاد میکند.
- پویانمایی بینابینی: پویانمایی را با انجام یک سری تبدیل روی یک تصویر با
پویانمایی ویژگی
پویانمایی تعریفشده در XML که ویژگیهای شیء هدف را، مثل رنگ پسزمینه یا مقدار آلفا، در طول مدت زمان مشخصی اصلاح میکند.
- مکان فایل:
res/animator/filename.xml
نام فایل بهعنوان شناسه منبع استفاده میشود.- نوع داده منبع کامپایلشده:
- اشارهگر منبع به
ValueAnimator،ObjectAnimator، یاAnimatorSet - مرجع منبع:
-
در کد مبتنی بر جاوا یا 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>، باهم گروهبندی کنید. - عناصر:
- مثال:
-
فایل 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بهعنوان یک راحتی تنظیم میکند. کد زیر نحوه انجام این کار را نشان میدهد:کاتلین
val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator) .apply { setTarget(myObject) start() }
جاوا
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.animator.property_animator); set.setTarget(myObject); set.start();
- همچنین ببینید:
-
- نمای کلی پویانمایی ویژگی
- نمونههای نمایشی API برای مثالهایی از نحوه استفاده از سیستم پویانمایی ویژگی
مشاهده پویانمایی
چارچوب پویانمایی نما از هر دو پویانمایی بینابینی و فریمبهفریم پشتیبانی میکند که هر دو در 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>تودرتو). - عناصر:
- مثال:
-
فایل 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اعمال میکند و پویانمایی را شروع میکند:کاتلین
val image: ImageView = findViewById(R.id.image) val hyperspaceJump: Animation = AnimationUtils.
loadAnimation(this, R.anim.hyperspace_jump) image.startAnimation(hyperspaceJump)جاوا
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 تعریف میشود، نامی دارد که با حرف کوچک شروع میشود. - مثال:
-
فایل 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>
- عناصر:
- مثال:
-
فایل 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تنظیم میکند، سپس پویانمایی را پخش میکند:کاتلین
val rocketImage: ImageView = findViewById(R.id.rocket_image) rocketImage.
setBackgroundResource(R.drawable.rocket_thrust) val rocketAnimation = rocketImage.backgroundif (rocketAnimation isAnimatable) { rocketAnimation.start()}جاوا
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.
setBackgroundResource(R.drawable.rocket_thrust); rocketAnimation = rocketImage.getBackground(); if (rocketAnimation instanceofAnimatable) { ((Animatable)rocketAnimation).start(); } - همچنین ببینید: