【问题标题】:2 dimensional scroll for a grid in AndroidAndroid中网格的二维滚动
【发布时间】:2019-01-02 12:27:44
【问题描述】:

到目前为止,我已经尝试制作一个(可能是无限的)网格来滚动但没有成功。我无法渲染屏幕外的GridView。这就是为什么我想问一下android中是否还有其他组件可以用于此任务?

【问题讨论】:

  • 您能补充一些要求吗?网格上应该有什么?多久会更新一次?是将一些图形元素放在那里然后滚动,还是需要将这些元素移动到不同的位置?

标签: android android-layout


【解决方案1】:

根据您的要求,它看起来像具有无限滚动的类似表格的 RecyclerView,或者某些 2d 游戏引擎(如果值得为此功能带来它)可能是您的最佳解决方案。

RecyclerView

如果您只想存储一些对象(图形或非图形 - 并不重要,如果您可以将它们打包到单元格中),您可以使用某种 RecyclerView 适配器和无限滚动的扩展。

这样您可以使用视图回收机制节省一些内存。使用详细的通知机制(如项目移动/删除),如果对象正在移动,您甚至可以添加一些动画。

除了像evrencoskun/TableView 这样的建议解决方案之外,我建议您看一下GridLayoutManger 的整体工作方式,这里是the first post out of threeRecyclerView 及其@987654327 的比较深入的回顾@s work`,因此您可以为您的特定情况定制更轻量级的解决方案。有一个simple demo app,带有“大网格”选项的“固定双向列表”可能会让您对将要构建的内容有所了解。您需要对其进行扩展以使用无限列表,但当您了解其内部结构后应该会更简单。

2D 引擎

如果想法是在任意大小的图块上添加一些图形,并且该功能是您的应用程序的核心,那么考虑使用一些 2d 引擎(如 libdx)可能是个好主意。他们有很多如何使用它的示例,但当然它会花费你一些存储空间和时间来学习它:libgdx wike

自己的解决方案

如果两者都不适合您的需求,我认为,您将不得不从头开始找到自己的解决方案。不要忘记优化它,因为 Android 中的每一个无限的东西,尤其是绑定到图形的东西,都可能很容易导致内存不足的错误。

【讨论】:

    【解决方案2】:

    我想推荐这个evrencoskun/TableView

    它允许您水平和垂直滚动。

    <com.evrencoskun.tableview.TableView
    android:id="@+id/content_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
    

    【讨论】:

    • 谢谢!看起来很有趣,我一定会去看看!
    • 看起来这张桌子不是我需要的。我需要一个网格来放置图形对象。我会看看我是否可以想出一个自定义组件。
    【解决方案3】:

    这个链接可能对你有帮助

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

    【讨论】:

    • 谢谢!我会看看。但是这个小部件不是为水平垂直滚动OR而设计的吗?两者都有吗?
    • 它为什么起作用?请突出显示相关部分或解释sn-p
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多