ListView距离列表顶部的距离

时间:2012-10-28 18:43:55

标签: android

我有一个ListView,我想创建一个与列表一起滚动的背景。

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

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

2 个答案:

答案 0 :(得分:1)

  

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

     

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

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

使用getItemAtPosition()

检索视图

答案 1 :(得分:1)

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