在滚动视图中回收视图

时间:2013-05-06 17:59:30

标签: android view scrollview adapter

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

This is how my UI looks

2 个答案:

答案 0 :(得分:7)

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

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

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

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

希望这张图片有所帮助

Example

我知道这听起来有点混乱,难以实施,但你没有问过一个简单的问题:) 希望这有助于并享受您的工作。

答案 1 :(得分:1)

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

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