Contenedor personalizado para Android (hexagonal) con adaptador
Quiero crear un contenedor Android personalizado. Donde fácilmente puedo agregar y quitar objetos. El contenedor debe colocar objetos dentro de hexágonos. El orden en que los objetos se colocan es realmente importante y se muestra en la imagen de abajo. Los objetos de este adaptador pueden hacer clic en ImageViews (circular). Incluso es posible hacer algo como esto para Android?
- Adición dinámica de vistas en un diseño de fragmento específico
- Error de IndexOutOfBoundsException de Android para la vista de lista de filtros de búsqueda
- Android SearchView con otros elementos de ActionBar
- Retrasar la llamada a onQueryTextChange () en SearchView.OnQueryTextListener con SearchView
- ¿Cómo puedo cerrar un SearchView mediante programación?
Sé que hubo preguntas similares como la mía, pero no hay ni siquiera cerca de lo que quiero lograr.
Probablemente más y más personas en busca de más contenedores personalizados como el que estoy tratando de hacer. No es el estándar como en otras aplicaciones: GridsView, ListView, etc.
Lo que ya he hecho
Decidí usar RecyclerView y RecyclerView.LayoutManagers de encargo. Escribe también un algoritmo para definir una posición de ImageViews. Lamentablemente, no estoy familiarizado con LayoutManager y no estoy seguro de cómo debo definir los lugares que utilizan interfaz.
RecyclerView
Aquí está el 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; }
- Android: uso de la vista personalizada en el widget
- SetOnItemClickListener en ListView que afecta a varias filas
- Cómo traer una vista al frente sin llamar bringToFront ()?
- ¿Por qué las vistas pierden el relleno cuando se establece un backgroundResource de xml?
- Fragmentos y problemas con la pantalla giratoria
- Acceso a TextView desde otra clase
- OnMeasure (): wrap_content, ¿cómo puedo saber el tamaño para envolver?
- ¿Cuál es la forma más rápida de agregar varias vistas a un LinearLayout?
La mejor solución es crear un diseño personalizado ( http://lucasr.org/2014/05/12/custom-layouts-on-android/ ) pero eso también es la forma más costosa (costo a tiempo para implementar) …
Alternativa puede crear una vista personalizada y dibujar imágenes directamente allí ( http://developer.android.com/training/custom-views/custom-drawing.html )
Todo lo que quieras saber sobre hex-maps: http://www.redblobgames.com/grids/hexagons/
¿Por qué es el diseño mejor que una vista de dibujo personalizada? Puede ser empaquetado en una biblioteca y utilizado para cualquier otra aplicación mientras que una vista de dibujo personalizada está más bien ligada a la aplicación …
Puede consultar esta biblioteca que hace exactamente lo que está solicitando https://github.com/xresco/Hexagon-Recyclerview
Es muy fácil de usar. En lugar de usar el valor por defecto recyclerview (o listview), simplemente use
<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" />
Se puede personalizar con los siguientes cuatro parámetros:
App: items_count_in_row aplicación: items_horizontal_spacing aplicación: items_vertical_spacing aplicación: orientación
- Automatizar el proceso de publicación de la aplicación para Android
- Obtención de metadatos de SHOUTcast utilizando IcyStreamMeta