我有一个ListView,我想创建一个与列表一起滚动的背景。
我看到Shelves的代码,因为GridView中的所有项目都是相同的高度,所以这是有效的,这是我无法做到的保证。我认为我可以使用类似的技术(即覆盖dispatchDraw),但是我需要知道每个项目与ListView顶部的距离 - 我该如何预先计算? ListView主要是静态的,相当小,所以如果我在列表中添加新项目时必须重新计算,这是可以的。
所以我的问题是:给定一个ListView和一个List适配器,如何计算列表顶部每个项目的距离?也就是说,项目0将是距离顶部0像素,项目20可能是距离顶部4032像素。或者,有没有更好的方法来做我想做的事情?
答案 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
中存储在该索引处的值。