8

我有一个显示频道列表的电视指南的应用程序。我的 UI 由许多显示电视节目的不同宽度的自定义视图组成,所有这些自定义视图都添加到水平滚动视图中,水平滚动视图添加到滚动视图中,因此我的视图可以左右和顶部二维滚动向下。这一切都很好,直到我添加了很多视图并且它开始非常慢。所以我需要一种方法来回收像listiew在滚动视图中所做的视图,也许有一个定制的滚动视图可以做到这一点,或者有人知道如何做到这一点,奇怪的是滚动视图没有像gridview和listview这样的适配器支持。

这就是我的 UI 的样子

4

2 回答 2

7

我做了类似的事情,只是我的视图没有像你的那样连接,但它们的大小都不同。

首先,您需要定义您的整个区域(不仅仅是查看屏幕)是否具有确定或动态数量的自定义视图。

如果您有确定数量的视图及其位置,您应该使用 Rect 列表创建它们的位置图(无论 xy 点是否属于,Rect 都有很好的功能)。然后,您定义屏幕上可见的最大视图。为了在没有持续加载的情况下工作,您应该拥有最大的可见视图 + 总对象的至少一行边框视图。毕竟,您应该很容易拥有自己的定位系统,您可以在其中加载屏幕范围内的视图+一些开销(这样做的目的是您希望您的用户在至少滚动一段时间时平滑过渡),如果您需要在卸载的同时加载一些(读取重用/不要处理对象并在 onScroll 事件中创建它们)并根据需要放置它们。

如果您想确定哪些视图应该可见,您只需浏览列表并询问 Views Rect 是否与要加载的区域的 Rect 相交。

希望这张图片能帮助更多一点

例子

我知道这听起来有点令人困惑且难以实施,但您没有问一个简单的问题 :) 希望这对您有所帮助并享受您的工作。

于 2013-05-15T01:31:52.697 回答
1

由适配器备份并回收视图的 ScrollView 是 ListView,顶部有几个额外的可选功能。

也许您想要一个由适配器支持的 Horizo​​ntalScrollView?搜索 Horizo​​ntalListView 会给你一些结果,例如:https ://github.com/dinocore1/DevsmartLib-Android 。

于 2013-05-13T10:23:54.770 回答