Антенный пользовательский контейнер (шестиугольный) с адаптером

Я хочу создать пользовательский контейнер для Android. Где я могу легко добавлять и удалять объекты. Контейнер должен размещать объекты внутри шестиугольников. Порядок расположения объектов действительно важен и показан на изображении ниже. Объекты в этом адаптере являются доступными по клику ImageViews (круговые). Можно даже сделать что-то подобное для Android?

Шестигранной круг

Я знаю, что были похожие вопросы, подобные моим, но нет даже близких к тому, чего я хочу достичь.

Вероятно, все больше и больше людей ищут больше пользовательских контейнеров, подобных тому, что я пытаюсь сделать. Не стандартный, как в других приложениях: GridsView, ListView и т. Д.

То, что я уже сделал

Я решил использовать RecyclerView и пользовательские RecyclerView.LayoutManagers . Также напишите алгоритм определения позиции ImageViews. К сожалению, я не знаком с LayoutManager и не знаю, как определить места, используя интерфейс.

RecyclerView

Вот алгоритм:

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; } 

Шестигранной Заказать

Лучшим решением является создание пользовательского макета ( http://lucasr.org/2014/05/12/custom-layouts-on-android/ ), но это также самый дорогой способ (стоимость исполнения) …

Альтернативой вы можете создать собственное представление и нарисовать изображения прямо там ( http://developer.android.com/training/custom-views/custom-drawing.html )

Все, что вам нужно знать о шестигранных картах: http://www.redblobgames.com/grids/hexagons/

Почему макет лучше, чем пользовательский вид чертежа? Он может быть упакован в библиотеку и использоваться для любого другого приложения, тогда как пользовательский вид чертежа скорее привязан к приложению …

Вы можете проверить эту библиотеку, которая делает именно то, что вы просите https://github.com/xresco/Hexagon-Recyclerview

Он очень прост в использовании. Вместо использования recyclerview по умолчанию (или listview) просто используйте

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

Вы можете настроить его, используя следующие четыре параметра:

App: items_count_in_row app: items_horizontal_spacing app: items_vertical_spacing приложение: ориентация

Intereting Posts
Файл не найден Исключение при попытке открыть базу данных SQLite для Android Как я могу использовать API-интерфейс для подключения facebook для мобильных пользователей с телефонной связью? Ошибка в памяти при использовании API Карт Google Android Parcelable – запись и чтение ArrayList <IA>, когда IA является интерфейсом Как получить список событий календаря устройств в устройстве Android? Как вы скомпилируете проект Android в файл .apk в Eclipse без запуска эмулятора? Установка пользовательского привязки при перетаскивании представления Получите срок действия API подписки Google Android для токена подписки. Добавить файлы в папку META-INF в Android .apk автоматически CommitAllowingStateLoss () в действиях фрагмента Как разрешить пользователю выбирать картинку из галереи для использования в игре LibGDX Android: оповещение о приближении и потреблении батареи JAVA_OPTS для увеличения размера кучи Выбор вкладки TabLayout Используя Otto, метод подписывается только в том случае, если я вызываю его непосредственно в другом месте