جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

اطلاعات شخصی شما برای پردازش سفارش شما استفاده می‌شود، و پشتیبانی از تجربه شما در این وبسایت، و برای اهداف دیگری که در سیاست حفظ حریم خصوصی توضیح داده شده است.

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > کار با Motion Editor در اندروید استودیو

کار با Motion Editor در اندروید استودیو

1399-03-15
ارسال شده توسط آموزنگار
اندروید
کار با Motion Editor در اندروید استودیو

در نسخه ۴ اندروید استودیو ویژگی Motion Editor اضافه شده است و با امکانات قوی توانسته است بسیار راحت ساخت و پیاده سازی انیمیشن در اندروید را انجام دهد.در این مطلب قصد داریم با این ویژگی بطور کامل آشنا شویم.

ایجاد انیمیشن با MotionLayout

MotionLayout یکی از کتابخانه هایی میباشد که با ConstraintLayout قابل پیاده سازی می باشد.برای شروع ابتدا میبایستی Dependency مربوطه را قرار دهید.

1
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta6'

برای پیاده سازی ابتدا میبایستی یک لایوت ایجاد کنید که با تگ MotionLayout  به عنوان والد این لایوت شروع شود ایجاد کرد.

ایجاد انیمیشن با MotionLayout

پس از ایجاد فایل ، می بینید که  MotionLayout به تگ layoutDescription نیاز دارد که روی آن تنظیم شود. این فایل MotionScene است که باید به لایوت وصل شود.

MotionScene  چیست ؟

آبجکت MotionScene  تعیین میکند که Motion Layout به چه صورتی میباید انیمیشن کامپوننت را انجام دهد.ما MotionScene را در یک فایل جدا در پوشه xml ایجاد میکنیم. برای ایجاد MotionScene فقط کافی است روی MotionLayout از کلید میبانبر Alt+Enterاستفاده کنید و روی گزینه Generate MotionScene file کلیک کنید.

MotionScene  چیست

این کار به طور اتوماتیک یک فایل XML جدید MotionScene را در پوشه xml ایجاد می کند. فایل پیش فرض MotionScene به شرح زیر است:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  
    <ConstraintSet android:id="@+id/start">
        <Constraint android:id="@+id/widget" />
    </ConstraintSet>
  
    <ConstraintSet android:id="@+id/end">
        <Constraint android:id="@id/widget" />
    </ConstraintSet>
  
    <Transition
        app:constraintSetEnd="@id/end"
        app:constraintSetStart="@+id/start" />
</MotionScene>

شما باید ویجت Constraint را که از فایل MotionScene ایجاد شده است ، حذف کنید.فایل لایوت MotionLayout ما به شرح زیر است

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutDescription="@xml/motion_layout_demo_scene">
  
</androidx.constraintlayout.motion.widget.MotionLayout>

الان میتوانید برای پیاده سازی انیمیشن به نمای Design بروید

نمای Design اندروید استودیو

در اینجا همانطور که مشاهده میکنید ویوی Motion  وجود دارد که قصد داریم انیمیشن مابین دو Button را پیاده سازی کنیم.

انیمیشن نمای Design

MotionLayout resting states (ConstraintSet

هدف MotionLayout این است که کل Layout ها حالتهای مختلفی داشته باشد که می تواند در آن ها animation ها را ایجاد کرد. آیتم ها با برچسب ConstraintSet تعریف شده اند.

هدف MotionLayout

هنگامی که روی هر کدام از state ها کلیک کنید  start یا end  . ادیتور بسته به انتخاب های بروز رسانی می شود.هنگام افزودن View های جدید و تنظیم وضعیت اولیه این View ها ، می توانید مطمئن شوید که “base state” (“Motion Layout”) را انتخاب کرده اید.

بیایید یک Button به Layout خود اضافه کنیم. ابتدا مطمئن شوید که “Base State” انتخاب شده است ، و سپس یک دکمه جدید را از  پالت  انتخاب کنید. سپس ما آن را بالا می بریم و Constraint ها را شروع می کنیم.

الان State نهایی را که تعریف کرده ایم انتخاب کنید. اکنون می توانیم Constraint های دکمه را برای Constraint کردن در پایین و انتهای صفحه ویرایش کنیم. هنگامی که ما بین State های مختلف Transition می شویم ، می بینیم که دکمه در State شروع و در انتهای State انتهایی در بالا است.

امنیت برنامه‌های اندرویدی: ضرورت‌ها و تهدیدها
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

الان دارای دو State و چندین Constraint مختلف هستیم.خب بیاید با هم دوباره یک Motion جدید اضافه کنیم.

افزودن Motion Layout States

برای افزودن یک resting state بر روی اولین دکمه در بخش بالایی کلیک کنید

افزودن Motion Layout States

به طور پیش فرض ، تمام State ها Constraint هایی را از state پایه MotionLayout به ارث می برند (یعنی Constraint هایی که در فایل لایوت وجود دارد). به همین دلیل لازم نیست Constraint هایی را برای استارت ایجاد کنیم ، بلکه فقط State را از MotionLayout به ارث می برد.

افزودن یک resting state

State جدیدی که ایجاد کردیم در داخل ادیتور قابل مشاهده میباشد.مشابه مثال های قبلی میبایستی Constraint مربوطه را به state جدید نیز اعمال کنیم.برای اینکار لازم است فقط state را انتخاب کنید و هر چقدر نیاز دارید Constraint ایجاد کنید.مانند تصویر زیر

State جدید

Transitions بین  state ها

ما State های مختلف خود را تنظیم کرده ایم و می دانیم که چگونه این انیمیشن اجرا شود. ما می خواهیم دکمه  از گوشه بالا سمت چپ به پایین سمت راست Transition شود. اما چگونه ما این اتفاق را می افتد؟

با Transitions ، می توانیم مشخص کنیم که کدام State شروع و کدام State نهایی است. اجرای Transition بین آنها به طور خودکار بین ConstraintSets مختلف که در هر حالت تعریف شده اند اتفاق می افتد.

اجرای MotionLayout animations در اندروید استودیو

اگر به ابتدای این مقاله نگاهی دوباره بندازید,خطوط با فلش بالاتر از State های Transitionشده  بین آنها است. هنگامی که روی خط کلیک می کنید ، ویرایشگر اطلاعات انتقال زیر State ها را نشان می دهد و شما قادر خواهید بود انیمیشن را بین آن دو حالت پخش کنید.

Transitions بین  state ها

شما میتوانید سرعت انیمیشن را بالا یا پایین بیارید با کلیک کردن بر روی دکمه 1.0x کنار دکمه play و هرکدام از حالات را انتخاب نمایید.

افزودن Transitions های جدید

مشابه افزودن State ها جدید که قبلتر اضافه کرده بودیم, می توانیم تعداد زیادی Transition را نیز به State ها اضافه کنیم.برای اینکار روی دکمه Add Transition کلیک کنید.

افزودن Transitions های جدید

ما می توانیم با مشخص کردن id برای transition تعیین کنیم کدام state باید start باشد و کدامیک end باشد.

مشخص کردن id برای transition

بعد از تعیین کردن انیمیشن ایجاد شده , در بخش دیزاین Motion Editor می توانید آن را مشاهده کنید. برای اینکار روی Transition کلیک کنید تا انیمیشن play شود.

تعیین کردن انیمیشن ایجاد شده

اتوماتیک transition با MotionLayout  با کلیک روی Button

در این بخش میخواهیم یک انیمیشن ایجاد کنیم تا بتوانیم هنگامی که رو یک button کلیک شد بتوانیم آن انیمیشن را اجرا کنیم.برای افزودن انیمیشن اتوماتیک روی دکمه سوم کلیک کنید تا listener باز شود.

اتوماتیک transition با MotionLayout

سپس در کادر ظاهر شده تعیین میکنیم که کدام انیمیشن شروع شود.

اتوماتیک transition با MotionLayout  با کلیک روی Button

سپس اپلیکیشن را اجرا میکنیم تا بتوانیم خروجی کار را مشاهده نماییم.

MotionLayout

افزودن یک KeyFrame به transition

ابتدا نیاز میباشد که تعیین کنیم State شروع ahpa را برابر مقدار 0.0  برای button قرار دهیم.سپس مقدار end را برابر با 1.0 قرار می دهیم.

پشتیبانی از چند زبانه ای و محلی سازی Localization در اندروید
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

الان نیاز داریم که مقدار ConstraintSet را برای start و end تعیین نماییم. برای شروع مقدار KeyFrame را روی 27% برای alpha  برای دکمه 1.0 قرار دهید.

افزودن یک KeyFrame

سپس  میتوانیم گزینه های مختلف “KeyAttribute” را انتخاب کنیم. KeyAttribute به ما این امکان را می دهد یک ویژگی را در قسمت مشخص در انیمیشن قرار دهیم (ویژگی هایی مانند Ahpha ، چرخش(Rotation) ، مقیاس(Scale) یا ارتفاع(Elevation)).

keyframe options

اکنون Target View ، موقعیت در انیمیشن را انتخاب می کنیم (از 100٪) و Attribute ی  را که می خواهیم این Target را هدف قرار دهد. ما موقعیت را برابر 27% قرار می دهیم و Attribute آلفا را Target قرار می دهیم.

create key attribute

الان میتوانید مشاهده کنید KeyFrame را که دارای Transition List هست.

Transitions list

با انتخاب کردن هر آیتم و باز کردن Attribute های در پنل کناری , می توانیم ببینیم KeyAttribute هایی که در alpha,motionTarget و  FramePosition را تعیین کرده بودیم.در صورتی که بخواهیم مقدار alpha را برابر 1.0 قرار داده شود , میتوانیم مقادیر را مانند تصویر زیر قرار دهید.

attributes

اگر “animation position tracker” را در ویرایشگر بچسبانیم ، می توانیم بطور واضح ببینیم که چگونه این انیمیشن از 0 تا 1 در طی 0 تا 27٪ انیمیشن و از 27٪ به بعد کاملاً مات می شود.

همانطور که در منو مشاهده می کنید ، بسیاری از گزینه های KeyFrame نیز در دسترس شما هستند. اگر می خواهید Attribut های دیگری را در طول انیمیشن تغییر دهید ، می توانید از KeyPosition ، KeyTrigger ، KeyCycle یا KeyTimeCycle برای رسیدن به افکت های مختلف استفاده کنید.

KeyFrames بهترین گزینه برای زمانی است که می خواهید بخشی از انیمیشن متفاوت باشد یا در حین Transition بین حالت Start و End تغییر کند.

سخن اخر

ویرایشگر جدید Motion Editor در Android Studio کار با MotionLayout را بسیار راحت تر از گذشته انجام می دهد. من واقعاً از کار با آن لذت می برم و از پیش نمایش انیمیشن هایم در اندروید استودیو بدون نیاز به اجرای آن بر روی یک دستگاه سرعت کار را خیلی بالا میبرد.

قبلی انتشار برنامه در گوگل پلی : راهنمای مرحله به مرحله
بعدی آموزش برنامه نویسی اندروید و پیش نیاز های آن

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=10817
  • Afghanistan (+93)
  • Albania (+355)
  • Algeria (+213)
  • American Samoa (+1)
  • Andorra (+376)
  • Angola (+244)
  • Anguilla (+1)
  • Antigua (+1)
  • Argentina (+54)
  • Armenia (+374)
  • Aruba (+297)
  • Australia (+61)
  • Austria (+43)
  • Azerbaijan (+994)
  • Bahrain (+973)
  • Bangladesh (+880)
  • Barbados (+1)
  • Belarus (+375)
  • Belgium (+32)
  • Belize (+501)
  • Benin (+229)
  • Bermuda (+1)
  • Bhutan (+975)
  • Bolivia (+591)
  • Bonaire, Sint Eustatius and Saba (+599)
  • Bosnia and Herzegovina (+387)
  • Botswana (+267)
  • Brazil (+55)
  • British Indian Ocean Territory (+246)
  • British Virgin Islands (+1)
  • Brunei (+673)
  • Bulgaria (+359)
  • Burkina Faso (+226)
  • Burundi (+257)
  • Cambodia (+855)
  • Cameroon (+237)
  • Canada (+1)
  • Cape Verde (+238)
  • Cayman Islands (+1)
  • Central African Republic (+236)
  • Chad (+235)
  • Chile (+56)
  • China (+86)
  • Colombia (+57)
  • Comoros (+269)
  • Cook Islands (+682)
  • Côte d'Ivoire (+225)
  • Costa Rica (+506)
  • Croatia (+385)
  • Cuba (+53)
  • Curaçao (+599)
  • Cyprus (+357)
  • Czech Republic (+420)
  • Democratic Republic of the Congo (+243)
  • Denmark (+45)
  • Djibouti (+253)
  • Dominica (+1)
  • Dominican Republic (+1)
  • Ecuador (+593)
  • Egypt (+20)
  • El Salvador (+503)
  • Equatorial Guinea (+240)
  • Eritrea (+291)
  • Estonia (+372)
  • Ethiopia (+251)
  • Falkland Islands (+500)
  • Faroe Islands (+298)
  • Federated States of Micronesia (+691)
  • Fiji (+679)
  • Finland (+358)
  • France (+33)
  • French Guiana (+594)
  • French Polynesia (+689)
  • Gabon (+241)
  • Georgia (+995)
  • Germany (+49)
  • Ghana (+233)
  • Gibraltar (+350)
  • Greece (+30)
  • Greenland (+299)
  • Grenada (+1)
  • Guadeloupe (+590)
  • Guam (+1)
  • Guatemala (+502)
  • Guernsey (+44)
  • Guinea (+224)
  • Guinea-Bissau (+245)
  • Guyana (+592)
  • Haiti (+509)
  • Honduras (+504)
  • Hong Kong (+852)
  • Hungary (+36)
  • Iceland (+354)
  • India (+91)
  • Indonesia (+62)
  • Iran (+98)
  • Iraq (+964)
  • Ireland (+353)
  • Isle Of Man (+44)
  • Israel (+972)
  • Italy (+39)
  • Jamaica (+1)
  • Japan (+81)
  • Jersey (+44)
  • Jordan (+962)
  • Kazakhstan (+7)
  • Kenya (+254)
  • Kiribati (+686)
  • Kuwait (+965)
  • Kyrgyzstan (+996)
  • Laos (+856)
  • Latvia (+371)
  • Lebanon (+961)
  • Lesotho (+266)
  • Liberia (+231)
  • Libya (+218)
  • Liechtenstein (+423)
  • Lithuania (+370)
  • Luxembourg (+352)
  • Macau (+853)
  • Macedonia (+389)
  • Madagascar (+261)
  • Malawi (+265)
  • Malaysia (+60)
  • Maldives (+960)
  • Mali (+223)
  • Malta (+356)
  • Marshall Islands (+692)
  • Martinique (+596)
  • Mauritania (+222)
  • Mauritius (+230)
  • Mayotte (+262)
  • Mexico (+52)
  • Moldova (+373)
  • Monaco (+377)
  • Mongolia (+976)
  • Montenegro (+382)
  • Montserrat (+1)
  • Morocco (+212)
  • Mozambique (+258)
  • Myanmar (+95)
  • Namibia (+264)
  • Nauru (+674)
  • Nepal (+977)
  • Netherlands (+31)
  • New Caledonia (+687)
  • New Zealand (+64)
  • Nicaragua (+505)
  • Niger (+227)
  • Nigeria (+234)
  • Niue (+683)
  • Norfolk Island (+672)
  • North Korea (+850)
  • Northern Mariana Islands (+1)
  • Norway (+47)
  • Oman (+968)
  • Pakistan (+92)
  • Palau (+680)
  • Palestine (+970)
  • Panama (+507)
  • Papua New Guinea (+675)
  • Paraguay (+595)
  • Peru (+51)
  • Philippines (+63)
  • Poland (+48)
  • Portugal (+351)
  • Puerto Rico (+1)
  • Qatar (+974)
  • Republic of the Congo (+242)
  • Romania (+40)
  • Reunion (+262)
  • Russia (+7)
  • Rwanda (+250)
  • Saint Helena (+290)
  • Saint Kitts and Nevis (+1)
  • Saint Pierre and Miquelon (+508)
  • Saint Vincent and the Grenadines (+1)
  • Samoa (+685)
  • San Marino (+378)
  • Sao Tome and Principe (+239)
  • Saudi Arabia (+966)
  • Senegal (+221)
  • Serbia (+381)
  • Seychelles (+248)
  • Sierra Leone (+232)
  • Singapore (+65)
  • Sint Maarten (+1)
  • Slovakia (+421)
  • Slovenia (+386)
  • Solomon Islands (+677)
  • Somalia (+252)
  • South Africa (+27)
  • South Korea (+82)
  • South Sudan (+211)
  • Spain (+34)
  • Sri Lanka (+94)
  • St. Lucia (+1)
  • Sudan (+249)
  • Suriname (+597)
  • Swaziland (+268)
  • Sweden (+46)
  • Switzerland (+41)
  • Syria (+963)
  • Taiwan (+886)
  • Tajikistan (+992)
  • Tanzania (+255)
  • Thailand (+66)
  • The Bahamas (+1)
  • The Gambia (+220)
  • Timor-Leste (+670)
  • Togo (+228)
  • Tokelau (+690)
  • Tonga (+676)
  • Trinidad and Tobago (+1)
  • Tunisia (+216)
  • Turkey (+90)
  • Turkmenistan (+993)
  • Turks and Caicos Islands (+1)
  • Tuvalu (+688)
  • U.S. Virgin Islands (+1)
  • Uganda (+256)
  • Ukraine (+380)
  • United Arab Emirates (+971)
  • United Kingdom (+44)
  • United States (+1)
  • Uruguay (+598)
  • Uzbekistan (+998)
  • Vanuatu (+678)
  • Venezuela (+58)
  • Vietnam (+84)
  • Wallis and Futuna (+681)
  • Western Sahara (+212)
  • Yemen (+967)
  • Zambia (+260)
  • Zimbabwe (+263)
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط