2016-02-11 26 views
5

Chcę utworzyć niestandardowy kontener Android. Gdzie mogę łatwo dodawać i usuwać obiekty. Kontener powinien umieszczać przedmioty w sześciokątach. Kolejność umieszczania obiektów jest naprawdę ważna i pokazana na obrazku poniżej. Obiekty w tej karcie to klikalne ImageView (okrągłe). Jest nawet możliwe, aby zrobić coś takiego na Androida?Kontener niestandardowy Android (sześciokątny) z adapterem

Hexagon-Circle

Wiem, że były podobne pytania, takie jak moja, ale nie są nawet zbliżone do tego, co chcemy osiągnąć.

Prawdopodobnie coraz więcej osób szuka więcej niestandardowych pojemników, takich jak ten, który próbuję wykonać. Nie średnia jeden jak w innych aplikacjach: GridsView, ListView itp

Co mam już

postanowiłem wykorzystać RecyclerView i niestandardowe RecyclerView.LayoutManagers. Napisz również algorytm, aby zdefiniować pozycję ImageViews. Niestety nie jestem zaznajomiony z LayoutManager i nie wiem, jak powinienem zdefiniować miejsca używając go Interface.

RecyclerView

Oto algorytm:

List<Object> list; 
int nuberOfElements = list.size(); 
int layerNr = 0; 
int radius = 0; 
int angle = 0; 

//handle first middel element postion(0,0) 
nuberOfPlaceElements --; 
radius += r; 

for(layerNr=1; nuberOfElements > 0; layerNr ++){ 
    for(int elementInLayer = 0; elementInLayer < layerNr * 6; elemnetInLayer ++){ 
     //layerNr *6 -> define how many elements in layer 

     angle += 360/layerNr * 6 
     //handle the postion of elemnts in Layer 

     nuberOfElements--; 
    } 
    radius += r; 
    angle = 0; 
} 

Hexagon-Order

Odpowiedz

1

najlepszym rozwiązaniem jest stworzenie niestandardowy układ (http://lucasr.org/2014/05/12/custom-layouts-on-android/), ale to także najbardziej kosztowny sposób (koszt na czas do wdrożenia) ...

alternatywnie możesz stworzyć własny widok i narysować obrazy bezpośrednio e (http://developer.android.com/training/custom-views/custom-drawing.html)

wszystko co kiedykolwiek chcesz wiedzieć o sześciokątnej mapach: http://www.redblobgames.com/grids/hexagons/

dlaczego układ lepiej niż myślą zwyczaj rysowania? może on być zapakowany w bibliotece i stosować do innych aplikacji podczas gdy widok niestandardowy rysunek jest raczej związany z aplikacji ...

+0

Thx :) Spojrzę na to rozwiązanie. Trudno jest dodać adapter do customView/customDrawing, aby móc łatwo usuwać, dodawać elementy? – Minis

+0

Informacje o niestandardowym widoku rysunku. Można narysować ImageViews? Na przykład ustawić na liście? – Minis

+1

możesz utworzyć widok w dowolnym momencie ...a po utworzeniu jest to całkiem proste, aby narysować ten widok ... i mimo że możesz dostarczyć model układu (nie jest to prawdziwa podklasa widoku/grupy widoku, tylko zwykły model pojo), który określa, gdzie narysować twój obrazek (nawet jeśli bardzo łatwo narysować obraz bezpośrednio) –

1

można sprawdzić tej biblioteki, która ma dokładnie to, czego domagają się https://github.com/xresco/Hexagon-Recyclerview

Jest bardzo prosty w użyciu. Zamiast domyślnego recyclerview (lub ListView) wystarczy użyć

<com.abed.hexagonrecyclerview.view.HexagonRecyclerView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/rvItems" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_centerVertical="true" app:items_count_in_row="3" app:items_horizontal_spacing="20dp" app:items_vertical_spacing="20dp" app:orientation="horizontal" />

można go zmienić za pomocą następujących czterech parametrów:

aplikacja: items_count_in_row aplikacja: items_horizontal_spacing aplikację: items_vertical_spacing aplikację: orientacja