شما می توانید از سیستم انیمیشن view برای اجرای انیمیشن tweened در Views استفاده کنید. انیمیشن Tween انیمیشن را با اطلاعاتی مانند نقطه شروع، نقطه پایان، اندازه، چرخش و سایر جنبه های رایج یک انیمیشن محاسبه می کند.
یک انیمیشن tween می تواند یک سری تبدیل ساده (موقعیت، اندازه، چرخش و شفافیت) را روی محتویات یک شی View انجام دهد. بنابراین، اگر یک شی TextView
دارید، میتوانید متن را جابهجا کنید، بچرخانید، رشد کنید یا کوچک کنید. اگر تصویر پس زمینه داشته باشد، تصویر پس زمینه به همراه متن تغییر شکل می دهد. animation package
تمام کلاس های مورد استفاده در یک انیمیشن tween را ارائه می دهد.
دنباله ای از دستورالعمل های انیمیشن، انیمیشن tween را تعریف می کند که با کد XML یا Android تعریف شده است. مانند تعریف یک طرح، یک فایل XML توصیه می شود زیرا خوانا، قابل استفاده مجدد و قابل تعویض تر از کدگذاری سخت انیمیشن است. در مثال زیر از XML استفاده می کنیم. (برای کسب اطلاعات بیشتر در مورد تعریف انیمیشن در کد برنامه خود، به جای XML، به کلاس AnimationSet
و سایر زیر کلاس های Animation
مراجعه کنید.)
دستورالعملهای انیمیشن تغییراتی را که میخواهید رخ دهند، زمانی که رخ میدهند و مدت زمانی که باید طول بکشد تا اعمال شوند را تعریف میکند. تبدیلها میتوانند متوالی یا همزمان باشند - برای مثال، میتوانید محتویات TextView را از چپ به راست حرکت دهید و سپس 180 درجه بچرخانید، یا میتوانید متن را حرکت داده و همزمان بچرخانید. هر تبدیل مجموعهای از پارامترهای خاص برای آن تبدیل را میگیرد (اندازه شروع و اندازه پایان برای تغییر اندازه، زاویه شروع و زاویه پایان برای چرخش و غیره)، و همچنین مجموعهای از پارامترهای رایج (به عنوان مثال، زمان شروع و مدت زمان) . برای اینکه چندین تغییر به طور همزمان اتفاق بیفتند، زمان شروع یکسانی را به آنها بدهید. برای متوالی کردن آنها، زمان شروع به اضافه مدت تبدیل قبلی را محاسبه کنید.
فایل XML انیمیشن در دایرکتوری res/anim/
پروژه اندروید شما قرار دارد. فایل باید یک عنصر ریشه واحد داشته باشد: این یک عنصر <alpha>
، <scale>
، <translate>
، <rotate>
، عنصر interpolator یا <set>
خواهد بود که گروههایی از این عناصر را در خود نگه میدارد (که ممکن است شامل دیگری باشد. <set>
). به طور پیش فرض، تمام دستورالعمل های انیمیشن به طور همزمان اعمال می شوند. برای اینکه آنها به صورت متوالی اتفاق بیفتند، باید مشخصه startOffset
را مشخص کنید، همانطور که در مثال زیر نشان داده شده است.
XML زیر از یکی از ApiDemos برای کشش، سپس چرخش و چرخش همزمان یک شی View استفاده می شود.
<set 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/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set>
مختصات صفحه (که در این مثال استفاده نمی شود) در گوشه سمت چپ بالا (0,0) هستند و با پایین رفتن و به سمت راست افزایش می یابند.
برخی از مقادیر مانند pivotX را می توان نسبت به خود شی یا نسبت به والد تعیین کرد. مطمئن شوید که از قالب مناسب برای آنچه می خواهید استفاده کنید ("50" برای 50٪ نسبت به والدین، یا "50٪" برای 50٪ نسبت به خودش).
شما می توانید با اختصاص یک Interpolator
تعیین کنید که چگونه یک تبدیل در طول زمان اعمال می شود. Android شامل چندین زیر کلاس Interpolator است که منحنیهای سرعت مختلفی را مشخص میکنند: به عنوان مثال، AccelerateInterpolator
به یک تبدیل میگوید که آهسته شروع شود و سرعت آن افزایش یابد. هر یک دارای یک مقدار مشخصه است که می تواند در XML اعمال شود.
با ذخیره این XML به عنوان hyperspace_jump.xml
در دایرکتوری res/anim/
پروژه، کد زیر به آن ارجاع می دهد و آن را به یک شی ImageView
از طرح اعمال می کند.
کاتلین
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation -> findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation) }
جاوا
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
به عنوان جایگزینی برای startAnimation()
، میتوانید با
زمان شروع انیمیشن را تعیین کنید، سپس انیمیشن را به View با Animation.setStartTime()
اختصاص دهید.View.setAnimation()
برای اطلاعات بیشتر در مورد نحو XML، برچسبها و ویژگیهای موجود، به منابع انیمیشن مراجعه کنید.
توجه: صرف نظر از اینکه انیمیشن شما چگونه ممکن است جابجا شود یا اندازه آن تغییر کند، محدوده نماهایی که انیمیشن شما را در خود نگه می دارد به طور خودکار برای مطابقت با آن تنظیم نمی شود. با این حال، انیمیشن همچنان فراتر از محدوده نمای خود کشیده می شود و بریده نمی شود. با این حال، اگر انیمیشن از محدوده نمای والد فراتر رود، بریده شدن اتفاق می افتد .