安卓自定义容器(六边形)与适配器

6

我想创建一个自定义的Android容器,可以轻松地添加和删除对象。该容器应将对象放置在六边形内。对象放置的顺序非常重要,并在下面的图像中显示。此适配器中的对象是可点击的ImageViews(圆形)。是否有可能为Android制作这样的东西?

Hexagon-Circle

我知道有类似的问题,但都与我想要实现的不太相似。

可能越来越多的人在寻找像我正在尝试创建的那种更自定义的容器。而不是其他应用程序中的标准容器,如GridsView、ListView等。

我已经完成的工作

我决定使用RecyclerView和自定义的RecyclerView.LayoutManagers。同时编写算法来定义ImageView的位置。不幸的是,我不熟悉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个回答

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/ 为什么布局比自定义绘图视图更好?它可以打包到库中,并用于任何其他应用程序,而自定义绘图视图则相对于应用程序而言更加受限...

谢谢 :) 我会看看那个解决方案。将适配器添加到自定义视图/自定义绘图中以便轻松删除、添加项目很困难? - Minis
关于自定义绘图视图。可以绘制ImageView吗?例如在列表中设置? - Minis
1
您可以随时创建视图...一旦创建,绘制该视图也非常简单...即使您可以提供布局模型(不是视图/视图组的真正子类,只是一个普通的POJO模型),确定在哪里绘制您的ImageViews(即使直接绘制图像也非常容易)。 - Martin Frank

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" />
你可以使用以下四个参数进行自定义:
app:items_count_in_row app:items_horizontal_spacing app:items_vertical_spacing app:orientation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接