Cum de a crea personalizate layoutmanagers pentru Android

Cum de a crea personalizate layoutmanagers pentru Android

În actualizarea recentă a suportului pentru bibliotecile Android, a apărut o nouă componentă RecyclerView, care a venit să înlocuiască ListView și a adus multe caracteristici noi. Acesta este conceput pentru a crea liste complexe complexe și vă permite să utilizați diferite LayoutManagers. inclusiv cele personalizate.







Pe unul dintre proiecte, trebuia să creăm o listă neconvențională a listei. Așa că am scris planurile noastre Carousel LayoutManager și Expand LayoutManager. Descrierea lor detaliată poate fi găsită pe GitHub.

În acest articol, dorim să discutăm despre principiile de bază ale creării de LayoutManagers personalizate. Implementarea propriilor planuri necesită scrierea unui număr mare de coduri. Pentru a facilita sarcina, vom împărți punctele-cheie.

Scrieți LayoutManager

Managerii standard LayoutManagers includ:

  • LinearLayoutManger - pentru liste clasice
  • GridLayoutManager - pentru o vizualizare de tabel
  • StaggeredGridLayoutManager - pentru compunerea elementelor în stilul Pinterest

Chiar și cu această alegere, în unele cazuri, machetele tipice nu sunt suficiente pentru a rezolva sarcinile de proiectare mobilă.

Înainte de a crea propriul LayoutManager, asigurați-vă că știți ce principii să îl creați.

Reguli generale pentru crearea de layout-uri personalizate:

1. Desenați numai ceea ce este afișat pe ecran.

2. Utilizați un algoritm rapid pentru a calcula pozițiile elementelor, nu pentru a rula întreaga listă din Adaptor (RecyclerView.Adapter).

3. Încă o dată, nu umflați vizualizările care sunt deja pe ecran, ci reutilizați-le.

4. Nu apelați requestLayout la fiecare ocazie. În schimb, dacă este necesar, mutați vizualizările. De exemplu, când trebuie să faceți o animație.

După ce ați învățat regulile de bază pentru crearea propriilor planificări, continuați cu metodele.

Metode pentru implementarea planurilor:

  • onLayoutChildren - metoda cea mai importantă, în cazul în care construcția de elemente pentru afișare pe ecran
  • onMeasure este o metodă foarte importantă. Dacă dimensiunile vederilor copilului în LayoutManager depind într-un fel de acest parametru, este important să îl zeroți, să îl redimensionați și să enumerați toate vizualizările copilului cu dimensiunile corecte.
  • scrollToPosition (int) - permite derularea întregului aspect într-o poziție specifică din Adaptor
  • smoothScrollToPosition (reciclerView, stare, poziție) - o defilare animată care vă cere să specificați direcția în care este derulată lista și tipul de viteză de animație
  • canScrollVertically / canScrollHorizontal - o modalitate foarte bună de a bloca posibilitatea derulării în direcții individuale
  • scrollVerticallyBy / scrollHorizontalBy - vă permite să modificați starea LayoutManagerului. Folosind această metodă, este necesar să scanați toate elementele sale și să returnați un număr egal cu numărul de suluri făcute. De exemplu, puteți reveni la 0, atunci va fi aproape echivalent cu interzicerea vitezei în metodele de mai sus.
  • onSaveInstanceState / onRestoreInstanceState - ajută la salvarea stării personalizate a LayoutManager, de exemplu, este necesar pentru trecerea






De fapt, metodele listate sunt responsabile pentru funcțiile care sunt executate de layouts. De exemplu, ExpandLayoutManager vă permite să afișați informații suplimentare pentru fiecare element din listă. Utilizează o varietate de scrollBy, scrollHorizontallyBy pentru derulare:

Caruselul nostru LayoutManager folosește din nou ScrollVerticallyBy și ScrollHorizontallyBy pentru a parcurge lista secțiunilor aplicației. Poate funcționa ciclic, adică lista este răsturnată fără sfârșit și poate până la un anumit prag. În plus, suportă scrollToPosition și smoothScrollToPosition pentru a putea sări imediat la elementul dorit din cod:

Efectul caruselului rotativ și aspectul zoom-ului este atașat chips-urilor arhitecturale, sub forma lui CarouselZoomPostLayoutListener. În special, acest ascultător reduce și deplasează ușor fiecare element de pe ecran, în funcție de poziția sa conform unui algoritm matematic.

După ce ați definit metodele și principiile cheie ale scrisului, puteți trece la arhitectură.

Studiem abordarea arhitecturii LayoutManagers

1. Organizați starea LayoutManagerului astfel încât, în orice moment, să cunoască offsetul său curent, locația primului și ultimului element, dimensiunile și alte caracteristici importante ale aspectului.

De exemplu, pentru ExpandLayoutManager, este mScrollOffset, mDecoratredChildHeight, mExpandItemPosition, mExecutingAnimationData. Cu aceste date, putem urmări întotdeauna starea LayoutManagerului nostru. Acest lucru este necesar pentru a fi capabil să-l restabilească cu onLayoutChildren, scrollVerticallyBy / scrollHorizontalBy, și pentru a sprijini animația.

2. Ștergeți vederile inutile înainte de a le completa cu cele necesare. Acest lucru nu înseamnă că trebuie să ștergeți toate vizualizările. Înseamnă a elimina numai cele care sunt acum invizibile.

3. Nu creați vizualizări noi dacă au fost deja adăugate în LayoutManager. Mergeți prin toate punctele sale de vedere și găsiți cel care este acum necesar. Dacă o astfel de vizualizare nu a fost găsită, creați-o cu getViewForPosition și apoi reatașați-o în poziția dorită în aspect folosind bindViewToPosition.

Există o astfel de caracteristică încât conținutul din Adaptor poate fi schimbat. Este necesar să capturați astfel de situații la timp, iar atunci când elementul este deja găsit în lista vizualizărilor copilului, apelați-l din nou pe bindViewToPosition. În caz contrar, puteți pierde modificările adaptorului.

4. O altă metodă, state.didStructureChange, este apelată atunci când ați mutat, șters sau adăugat elemente din mijlocul listei. Afișează modificările care apar în aspect.

În general, implementarea layout-ului vizează adăugarea, măsurarea și poziționarea vederilor copilului în ordinea dată în timp real. Adică, dacă utilizatorul scroll ecranul aplicației cu o listă de partiții, este de la LayoutManager că depinde când se pot adăuga vizualizări noi de copii și când cele vechi sunt ascunse și șterse. Prin urmare, dacă aspectul dvs. are o arhitectură sigură, atunci garantați că utilizatorul va interacționa perfect cu aplicația și cu elementele listă personalizată.







Articole similare

Trimiteți-le prietenilor: