Android自定义容器(六角形)与适配器

时间:2016-02-11 11:46:50

标签: java android layout view containers

我想创建一个自定义的android容器。我可以轻松添加和删除对象。容器应将对象放在六边形内。对象放置的顺序非常重要,如下图所示。此适配器中的对象是可单击的ImageViews(循环)。 甚至可以为Android制作这样的东西?

Hexagon-Circle

我知道有类似我的问题,但是我甚至没有达到我希望实现的目标。

可能会有越来越多的人在寻找更多自定义容器,就像我想要的那样。不像其他应用程序那样标准: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;
}

Hexagon-Order

2 个答案:

答案 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_horizo​​ntal_spacing 应用:items_vertical_spacing 应用程式:取向