Hogyan hozzunk létre egyéni layoutmanagers android

Hogyan hozzunk létre egyéni layoutmanagers android

Egy, a közelmúltban frissítés könyvtárak támogatja az Android, az új alkatrész RecyclerView, aki azért jött, hogy cserélje ki a ListView és hozott egy csomó új lehetőségeket. Úgy tervezték, hogy hozzon létre egy nagy, összetett listákat, és lehetővé teszi, hogy különböző LayoutManagers. beleértve az egyéni.

Az egyik projekt, mi szükség van, hogy hozzon létre egy nem hagyományos nézet a listán. Így írták elrendezések Carousel LayoutManager és kibontása LayoutManager. A részletes leírást megtalálható GitHub.

Ebben a cikkben szeretnék beszélni alapelveinek létrehozása egyéni LayoutManagers. Megvalósítás saját elképzelései írását teszi szükségessé egy csomó kód. Hogy megkönnyítsük a dolgukat, akkor osztoznak a legfontosabb pillanatokban.

Írása LayoutManager

A szabványos LayoutManagers tartalmazza:

  • LinearLayoutManger - klasszikus listák
  • GridLayoutManager - a táblázatos formában
  • StaggeredGridLayoutManager - az összetételét elemek a stílus Pinterest

Még egy ilyen választás, egyes esetekben tipikus elrendezés nem elég, hogy megfeleljen a kihívásoknak a design mobil alkalmazások.

Mielőtt létrehozná a LayoutManager saját, győződjön meg róla, hogy milyen elveket létrehozni.

Általános szabályok létrehozására egyéni elrendezések:

1. Draw csak mi jelenik meg a képernyőn.

2. Használjon gyors algoritmus helyzetét meghatározó eleme, és nem fut körbe a lista Adapter (RecyclerView.Adapter).

3. Ismét nem infleytit nézetek, amelyek már a képernyőn, és újra őket.

4. Ne okozzunk requestLayout minden lehetőséget. Ehelyett azáltal, hogy a tekercs, ha szükséges. Például, amikor meg kell, hogy az animáció.

Amikor megtanultuk az alapvető szabályokat, hogy saját layouts, menjen a módszereket.

Módszerek végrehajtani elrendezések:

  • onLayoutChildren - a fő módszer, ahol a szerkezeti elemek zajlik a kijelző
  • onMeasure - egy nagyon fontos módszer. Ha a méretei gyermek nézetek LayoutManager valahogy függ ez a paraméter, fontos, hogy reset, újraszámolni a mérete és újra számolni a gyermek nézeteit a megfelelő méreteket.
  • scrollToPosition (int) - lehetővé teszi, hogy lépjünk a teljes elrendezés egy bizonyos helyzetben a Adapter
  • smoothScrollToPosition (recyclerView, állami pozíció) - animált tekercset, amely előírja, hogy lépjünk át a listát, és írja az irányt az animáció sebessége
  • canScrollVertically / canScrollHorizontal - egy nagyszerű módja annak, hogy rögzítse görgetés képességek bizonyos területeken
  • scrollVerticallyBy / scrollHorizontalBy - lehetővé teszi, hogy változtatni az állam a LayoutManager. Ezzel a módszerrel, akkor proskrollit annak minden elemét, és visszatér a szám, ahány tekercsek készült. Például, akkor vissza 0, akkor lesz szinte felér egy tilalmat skorollinga Fenti módszer.
  • onSaveInstanceState / onRestoreInstanceState - segít megmenteni az állam egy egyedi a LayoutManager például szükséges puccsok

Tény, hogy ezek a módszerek felelős funkciók elvégzésére elrendezés. Például a ExpandLayoutManager lehetővé teszi, hogy a kiegészítő információk megjelenítéséhez az egyes elemet a listából. Ez használ a különböző scrollBy, scrollHorizontallyBy görgetés funkciók:

A Carousel LayoutManager újra használja ScrollVerticallyBy és ScrollHorizontallyBy, hogy lépjünk át a szakaszok felsorolása a kérelmet. Csak akkor működik, ciklusokban, azaz tükrözés lista a végtelenségig, és talán, hogy egy bizonyos küszöbértéket. Ezen felül támogatja scrollToPosition és smoothScrollToPosition lehetővé teszi az azonnali átmenet a kívánt elemet a kód:

A hatás a forgó karusszel és zoom tagolások építészeti darab a CarouselZoomPostLayoutListener. Különösen ez csökkenti a hallgató és kissé eltolódik az egyes elemek a képernyőn, attól függően, hogy álláspontját illetően valamilyen matematikai algoritmus.

Meghatározta a legfontosabb elveket és módszereket az írás elrendezés, akkor lépni az architektúra.

Működési építészeti megközelítés LayoutManagers

1. Szervezze LayoutManager állapotát, hogy bármikor tudni, hogy a jelenlegi offset, az elrendezés az első és az utolsó elem, méretüket, és más fontos jellemzőit az elrendezés.

Például erre ExpandLayoutManager mScrollOffset, mDecoratredChildHeight, mExpandItemPosition, mExecutingAnimationData. Ezeket az adatokat, akkor mindig nyomon követheti milyen állapotban a LayoutManager. Szükséges, hogy képes helyreállítani, ha onLayoutChildren, scrollVerticallyBy / scrollHorizontalBy és animációk támogatása.

2. Vegye ki a felesleges lengéscsillapítók töltés előtt szükség. Ez nem azt jelenti, hogy meg kell tartani az összes nézetet. Ez azt jelentette, eltávolítása csak azokat, amelyek most látható.

3. Ne hozzon létre új nézeteket, ha hozzáadjuk a LayoutManager. Menj át rajta, és megtalálja a csappantyú, ami most szükséges. Ha egy ilyen zsalu nem található, hozza létre azt a getViewForPosition, majd ismét kötni, hogy a kívánt helyre az elrendezés segítségével bindViewToPosition.

Van olyan funkció, amely a adaptert tartalom lehet változtatni. Be kell időben elkapni ilyen helyzetekben, és amikor az elem már megtalálható a gyerek lista vyushek ismét felszólítom bindViewToPosition meg. Ellenkező esetben előfordulhat, elveszik adapter.

4. Egy másik módszer az úgynevezett state.didStructureChange ha mozgott, törölt vagy hozzáadott elemek közepén a listán. Ez mutatja a változásokat az elrendezés.

Az egész elrendezés célja megvalósítása túlmenően a mérési és a helyét a gyermek nézetek egy meghatározott sorrendben, valós időben. Azaz, ha a felhasználó a képernyő app egy szekciók listáját, ez függ a LayoutManager amikor új leányvállalatok csillapítók adhatunk, és amikor a hide, és eltávolítja a régieket. Ezért, ha az elrendezés robosztus architektúra, akkor garantálja, hogy a felhasználó nem lesz probléma, hogy kölcsönhatásba lépnek a kérelmet, és az elemek egy egyéni listát.

Kapcsolódó cikkek