Transformările de animație Android

Animație poate fi realizată ca o serie de transformări simple, - o schimbare a poziției, dimensiunea, unghiul de rotație și nivelul de transparență Vizualizare pe suprafața obiectului. De exemplu, TextView obiect, puteți muta, roti și zoom text. Dacă TextView obiect are o imagine de fundal, acesta va fi convertit împreună cu textul. Pachetul android.view.animation conține clasele necesare pentru a anima cu cadre intermediare.

Principalele clase de animație și conformitatea acestora cu XML:

  • AnimationSet (elementul ) - o clasă care reprezintă un grup de animații care trebuie să ruleze împreună. În cazul în care clasa AnimationSet stabilește orice proprietăți, aceste proprietăți sunt moștenite și obiecte care aparțin grupului;
  • AlphaAnimation (elementul ) - controlează transparența obiectului;
  • RotateAnimation (elementul ) - controlează rotația obiectului;
  • ScaleAnimation (elementul ) - controlează scalarea obiectului, adică modificări dimensionale;
  • TranslateAnimation (elementul ) - controlează poziționarea obiectului (în mișcare)

Echipa de animație determină conversia care urmează să fie efectuate pe obiect. Transformări poate fi secvențială sau simultană. Fiecare transformare are set de parametri definit pentru această conversie (dimensiunea inițială, atunci când dimensiunea finală este redimensionat, unghiul de pornire și se termină unghiul de rotație a obiectului și t. D.), și setul de parametri comuni (de exemplu, ora de începere și durată). Dacă doriți să faceți câteva modificări în același timp, li se cere în același timp de pornire. Dacă doriți să faceți transformări succesive, dată de timpul lor de start, plus durata conversiei anterioare.

Secvența de comenzi de animație definite în fișier XML (de preferat) sau în codul de program.

Crearea de animație în fișier XML

animații fișier XML caracteristică în res / anim / directorul proiectului. Fișierul trebuie să aibă un singur element rădăcină: aceasta va fi oricare dintre elementele , , , sau un element , care este un container pentru aceste patru componente (și poate include un alt recipient ).

În mod implicit, toate elementele sunt aplicate simultan. Pentru a lansa un produs în mod succesiv, este necesar să se stabilească și să specifice startOffset valoare de atribut în milisecunde, de exemplu:

atributele de animație

În elemente , , , și susținută de caracteristicile comune moștenite din Animation clasă de bază:

  • durata - durata efectului în milisecunde;
  • startOffset - inițial de timp offset pentru acest efect, în milisecunde;
  • fillBefore - când este setat la true. animație transformare este aplicată înainte de a începe animația;
  • fillAfter - când este setat la true. transformare se aplică după sfârșitul animației;
  • repeatCount - definește numărul de repetiții ale animației poate fi folosită o valoare infinit (infinit);
  • repeatMode - determină comportamentul animației atunci când acesta este terminat. Variante posibile: repornire (reset neschimbat) sau invers (schimba animația în direcția inversă);
  • zAdjustment - definește axa Z modul prin care se dispune pentru a utiliza atunci când se efectuează animație (normal, de sus sau de jos);
  • interpolator - definește o viteză constantă, care descrie dinamica activității vizuale în funcție de timp sau, în termeni simpli, determină viteza schimbărilor de animație. Puteți utiliza oricare dintre elementele subclasa interpolator definite în R.styleable, de exemplu: Android: interpolator = „@ Android: Anim / decelerate_interpolator“

element

element - un container care poate conține alte elemente. Este AnimationSet clasa. Suporta atributul shareInterpolator. care, atunci când adevărata valoare indică posibilitatea de a împărtăși această interpolator pentru toate elementele de copil.

element

Treptat, schimbarea transparența animației folosind AlphaAnimation. Acesta susține următoarele atribute:

  • fromAlpha - valoarea inițială a transparenței obiectului;
  • toAlpha - valoarea finală a transparenței obiectului;

Atribute includ valoarea transparenței între tipul 0 și 1 float, unde 0 înseamnă transparență completă a obiectului.

element

element controale de animație redimensiona obiectul și este clasa ScaleAnimation. Puteți defini punctul central al imaginii (imaginea de a stabili centrul de animație), despre care obiectul va schimba scalarea. element Acesta susține următoarele atribute:

  • fromxScale - scala inițială X. Valorile valide sunt la 0 la 1 de tip float;
  • toxScale - scara finală a X. Intervalul este de la 0 la 1 de tip float;
  • fromYScale - scala inițială de Y. Valorile valide sunt la 0 la 1 de tip float;
  • toYScale - scara finală a Y. Intervalul este de la 0 la 1 de tip float;
  • pivotX - X-coordonata centrului fix. Acesta descrie punctul central al scalarea unui procent din lățimea de la 0% la 100%;
  • pivotY - Y-coordonata centrului fix. Acesta descrie punctul central al scalarea unui procent din înălțimea de la 0% până la 100%;

element

element Se creează o tween mișcare pe verticală sau pe orizontală. Este clasa TranslateAnimation și acceptă următoarele atribute:

  • fromXDelta - poziția inițială pe X;
  • toXDelta - poziția finală în X;
  • fromYDelta - poziția inițială prin Y;
  • poziție finală în Y - toYDelta

Atributele trebuie să fie în oricare dintre următoarele trei formate:

  • valoarea absolută
  • Valorile procentuale de la -100% la 100%
  • Valorile procentuale de la -100 până la 100% p% p, unde p indică procentul în raport cu părintele său.

De exemplu, pentru un efect de diapozitive, atunci când un element împinge un element total diferit, se realizează prin două animații dreapta la stânga sau de la stânga la dreapta

element

element pentru animație de rotație este clasa RotateAnimation. Acesta susține următoarele atribute:

  • fromDegrees - unghi inițial de rotație în grade;
  • toDegrees - rotația unghiului final în grade;
  • pivotX - coordonata X a pixelilor centrul de rotație;
  • pivotY - coordonata Y a pixelilor centrului de rotație;

Exemple de transformări de animație

Puteți crea mai multe fișiere de animație și de a le folosi pentru același obiect. Luați în considerare exemplul dreptunghi de lucru de animație. Din păcate, nu am câștigat exemplul schimbării în transparență (alfa), este posibil să aveți mai mult noroc. (Ca unul dintre cititori, un exemplu de mai rulează pe emulator 2.1 și 2.3.3 pe emulator).

Crearea unui nou proiect in / Anim / proiect pentru a crea res directorul de cinci fișiere cu XML-animație: alpha.xml, rotate.xml, scale.xml, translate.xml și fișierul combination.xml pe care le vom folosi o combinație de diferite obiecte pentru a crea animație mixt.

rotate.xml

translate.xml

combination.xml

forma de dreptunghi pentru animație este definit în fișierul shape.xml, care va fi amplasat în res directorul / / drawable.

Vom trece la formularele de cerere de aspect de bază (main.xml). Pune elementul ImageView:

Animație se execută în codul, după cum urmează: este necesar să se creeze un obiect de animație prin apelarea AnimationUtils.loadAnimation metoda () și trece-l ca parametru la activitatea contextului și link-ul la animații fișier XML. Apoi rulați animația prin View.startAnimation () metoda, care trece în animație obiect:

AnimationListener

Clasa Animation a investit interfață AnimationListener. Interfața AnimationListener vă permite să creați o tratare a evenimentului care este declanșat la începutul sau la sfârșitul animației. Folosind aceasta, puteți efectua orice operație înainte (sau după) animație pentru a termina treaba. Aceasta poate fi o schimbare în conținutul sau prezentarea de afișare în serie mai multe animații.

În interfața AnimationListener are trei metode de apel invers:

  • onAnimationEnd ()
  • onAnimationRepeat ()
  • onAnimationStart ()

Aceste metode pot fi puse în aplicare de procesare de cod al evenimentului de declanșare, la sfârșitul animației și a reporni. De exemplu, la sfârșitul animației, puteți face o animație invizibil obiect și începe din nou pe ecranul de afișare:

Call setAnimationListener () metoda a obiectului de animație și care trece-l ca o interfață AnimationListener implementare parametru, dacă este necesar, metode imperative onAnimationEnd (), onAnimationStart () și onAnimationRepeat ().

Practic, clasa va crea un meniu de cinci elemente care corespund fiecărui tip de animații: Alpha declansate, Scale, Translate, Rotire, și combinație. Ca un identificator al meniului folosind identificatori XML-fișier animație resurse, simplificând astfel structura metodei onOptionsitemSeiected (), numit atunci când este selectat elementul de meniu.

fișiere grafice de animație

Animație pentru fișiere grafice nu diferă în special de animație pentru forme grafice. Luați în considerare exemplul unei animații grafice afișate în ImageView. Crearea unui proiect nou și pentru a găsi orice fișier de imagine cu imaginea unei pisici (dar nu și câini, în caz contrar nu va funcționa!).

animații fișier XML va crea următoarea structură: folosind elemente pentru a întinde imaginea și sub-container , în care definim două elemente copil și pentru rotirea simultană și mărimea obiectului schimbare. Acest fișier trebuie să fie salvat în res / anim / director sub orice nume, de exemplu, crazycat.xml

crazycat.xml

Fișierul de marcare pentru a plasa un buton pentru a porni animația și elementul o ImageView imaginii noastre.

Rămâne să scrie codul:

Apăsarea imagine pisica este prima se extinde treptat pe orizontală, apoi rotit simultan și reduse în dimensiune, iar apoi revine la starea sa inițială.

Transformările de animație Android

Nu contează cât de animație schimbă dimensiunea obiectului sau mutați-l pe planul, View, elementul de frontieră încărcat cu imaginea va rămâne același: animația nu va regla automat dimensiunea de prezentare a proprietății. În cazul în care animația depășește limitele de vedere părinte, nu va fi clipsare de animație obiect.

reprezentări de grup Animație

Animațiile pot fi făcute pentru câteva spectacole, combinându-le într-un grup. De exemplu, plasarea unui container de reprezentare LinearLayout, fiind posibil să se utilizeze nu numai imaginea, ci reprezentarea textului.

Principiul de animație rămâne aceeași. Fișierul de marcare aplicație, plasați LinearLayout container copil, care găzduiește widget-ul ImageView cu o imagine și o casetă text cu inscripția TextView. asigurați-vă că pentru a seta identificatorul pentru copil al containerului, pe care îl puteți încărca în codul de program și de a folosi pentru animație.

Codul Clasa ar fi puțin diferit de exemplul anterior, cu excepția faptului că lucrăm cu animație de prezentare și face animație reprezentări nu separate ale grupului: