2016-02-11 30 views
5

Desidero creare un contenitore Android personalizzato. Dove posso facilmente aggiungere e rimuovere oggetti. Il contenitore dovrebbe posizionare oggetti all'interno di esagoni. L'ordine in cui gli oggetti sono posti è davvero importante e mostrato nell'immagine qui sotto. Gli oggetti di questo adattatore sono ImageViews (circolari) cliccabili. È persino possibile creare qualcosa come questo per Android?Contenitore personalizzato Android (esagonale) con adattatore

Hexagon-Circle

So che c'erano domande simili come la mia, ma non ci sono nemmeno vicino a quello che voglio raggiungere.

Probabilmente sempre più persone cercano altri contenitori personalizzati come quello che sto cercando di realizzare. Non quello standard come in altre applicazioni: GridsView, ListView, ecc

Quello che ho già fatto

ho deciso di utilizzare RecyclerView e personalizzato RecyclerView.LayoutManagers. Scrivi anche un algoritmo per definire una posizione di ImageViews. Sfortunatamente non ho familiarità con LayoutManager e non sono sicuro di come dovrei definire i luoghi che lo utilizzano.

RecyclerView

Ecco l'algoritmo:

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

risposta

1

migliore soluzione è quella di creare un layout personalizzato (http://lucasr.org/2014/05/12/custom-layouts-on-android/), ma questo è anche il modo più costoso (costo in tempo per implementare) ...

alternativa è possibile creare una vista personalizzata e disegnare direttamente le immagini e (http://developer.android.com/training/custom-views/custom-drawing.html)

tutto quello che mai volete sapere su hex-mappe: http://www.redblobgames.com/grids/hexagons/

perché è layout di meglio di una vista di disegno personalizzato? esso può essere confezionato in una libreria e utilizzata per qualsiasi altra applicazione che, una vista di disegno personalizzato è piuttosto legato alla domanda ...

+0

Thx :) Vedrò questa soluzione. È difficile aggiungere l'adattatore a customView/customDrawing in modo da poter rimuovere facilmente, aggiungere elementi? – Minis

+0

Informazioni sulla vista disegno personalizzata. È possibile disegnare ImageViews? Ad esempio impostato in Elenco? – Minis

+1

puoi creare una vista in qualsiasi momento ...e una volta creato è anche abbastanza semplice disegnare quella vista ... e anche se puoi fornire un modello di layout (non una vera sottoclasse di view/viewgroup, solo un modello di pojo semplice) che determina, dove disegnare le tue imageViews (anche se è molto facile disegnare un'immagine direttamente) –

1

è possibile controllare questa libreria che fa esattamente quello che stai chiedendo https://github.com/xresco/Hexagon-Recyclerview

È super semplice da usare. Invece di utilizzare il recyclerview di default (o ListView) basta usare

<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" />

è possibile personalizzare utilizzando i seguenti quattro parametri:

app: items_count_in_row app: items_horizontal_spacing app: items_vertical_spacing app: orientamento