我想创建一个自定义的android容器。我可以轻松添加和删除对象。容器应将对象放在六边形内。对象放置的顺序非常重要,如下图所示。此适配器中的对象是可单击的ImageViews(循环)。 甚至可以为Android制作这样的东西?
我知道有类似我的问题,但是我甚至没有达到我希望实现的目标。
可能会有越来越多的人在寻找更多自定义容器,就像我想要的那样。不像其他应用程序那样标准:GridsView,ListView等。
我已经做了什么
我决定使用 RecyclerView 和自定义 RecyclerView.LayoutManagers 。还要编写一个算法来定义ImageViews的位置。不幸的是,我不熟悉LayoutManager,不知道如何使用它定义场所。
这是算法:
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;
}
答案 0 :(得分:1)
最佳解决方案是创建自定义布局(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/
为什么布局比自定义图纸视图更好?它可以打包在一个库中并用于任何其他应用程序,而自定义绘图视图则绑定到应用程序......
答案 1 :(得分:1)
你可以查看这个库,它完全符合你的要求 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" />
您可以使用以下四个参数对其进行自定义:
应用程式:items_count_in_row 应用:items_horizontal_spacing 应用:items_vertical_spacing 应用程式:取向