2

我有一个 ListView,我想制作一个随列表滚动的背景。

我看到了Shelves的代码,它之所以有效,是因为 GridView 中的所有项目都具有相同的高度,这是我无法保证的。我认为我可以使用类似的技术(即覆盖 dispatchDraw),但我需要知道每个项目与 ListView 顶部的距离 - 我如何预先计算这个?ListView 大部分是静态的并且相当小,所以如果我在向列表中添加新项目时必须重新计算是可以的。

所以我的问题是:给定一个 ListView 和一个 List 适配器,我如何计算每个项目与列表顶部的距离?也就是说,项目 0 距离顶部 0 像素,项目 20 可能距离顶部 4032 像素。或者,有没有更好的方法来做我想做的事?

4

2 回答 2

1

可以通过调用 getLeft() 和 getTop() 方法来检索视图的位置。前者返回代表视图的矩形的左坐标或 X 坐标。后者返回代表视图的矩形的顶部或 Y 坐标。这些方法都返回视图相对于其父视图的位置。例如,当 getLeft() 返回 20 时,这意味着视图位于其直接父级的左边缘右侧 20 像素处。

此外,还提供了几种方便的方法来避免不必要的计算,即 getRight() 和 getBottom()。这些方法返回代表视图的矩形的右边缘和下边缘的坐标。例如,调用 getRight() 类似于以下计算:getLeft() + getWidth()(有关宽度的更多信息,请参阅 Size。)

http://developer.android.com/reference/android/view/View.html

使用 getItemAtPosition() 检索视图

于 2012-10-28T18:52:29.293 回答
1

在您的适配器中,保留与您的列表大小相同的第二个距离列表。在你的构造函数中初始化它。然后,对于每个 getView() 调用,您可以将视图的高度添加到存储在此新列表的前一个索引处的值。例如,假设你有List<Integer> distances. 当你用 调用getView(...)position = 0,你设置distances.add(0 + view.getHeight());(一旦你的视图被初始化)。对于位置 1,您将使用distance.add(distances.get(position-1) + view.getHeight);,依此类推。然后只需有一个方法来获取给定视图索引的距离,该方法返回存储在distances.

于 2012-10-28T18:54:36.653 回答