【发布时间】:2019-01-02 12:27:44
【问题描述】:
【问题讨论】:
-
您能补充一些要求吗?网格上应该有什么?多久会更新一次?是将一些图形元素放在那里然后滚动,还是需要将这些元素移动到不同的位置?
【问题讨论】:
根据您的要求,它看起来像具有无限滚动的类似表格的 RecyclerView,或者某些 2d 游戏引擎(如果值得为此功能带来它)可能是您的最佳解决方案。
RecyclerView
如果您只想存储一些对象(图形或非图形 - 并不重要,如果您可以将它们打包到单元格中),您可以使用某种 RecyclerView 适配器和无限滚动的扩展。
这样您可以使用视图回收机制节省一些内存。使用详细的通知机制(如项目移动/删除),如果对象正在移动,您甚至可以添加一些动画。
除了像evrencoskun/TableView 这样的建议解决方案之外,我建议您看一下GridLayoutManger 的整体工作方式,这里是the first post out of three 对RecyclerView 及其@987654327 的比较深入的回顾@s work`,因此您可以为您的特定情况定制更轻量级的解决方案。有一个simple demo app,带有“大网格”选项的“固定双向列表”可能会让您对将要构建的内容有所了解。您需要对其进行扩展以使用无限列表,但当您了解其内部结构后应该会更简单。
2D 引擎
如果想法是在任意大小的图块上添加一些图形,并且该功能是您的应用程序的核心,那么考虑使用一些 2d 引擎(如 libdx)可能是个好主意。他们有很多如何使用它的示例,但当然它会花费你一些存储空间和时间来学习它:libgdx wike
自己的解决方案
如果两者都不适合您的需求,我认为,您将不得不从头开始找到自己的解决方案。不要忘记优化它,因为 Android 中的每一个无限的东西,尤其是绑定到图形的东西,都可能很容易导致内存不足的错误。
【讨论】:
我想推荐这个evrencoskun/TableView。
它允许您水平和垂直滚动。
<com.evrencoskun.tableview.TableView
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
【讨论】:
这个链接可能对你有帮助
https://github.com/jess-anders/two-way-gridview
<?xml version="1.0" encoding="utf-8"?>
<com.jess.ui.TwoWayGridView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#E8E8E8"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:cacheColorHint="#E8E8E8"
app:columnWidth="80dp"
app:rowHeight="80dp"
app:numColumns="auto_fit"
app:numRows="auto_fit"
app:verticalSpacing="16dp"
app:horizontalSpacing="16dp"
app:stretchMode="spacingWidthUniform"
app:scrollDirectionPortrait="vertical"
app:scrollDirectionLandscape="horizontal"
app:gravity="center"/>
【讨论】: