【Android ScrollView中的VerticalScrollExtent是什么()】弱龄寄事外,委怀在琴书。这篇文章主要讲述Android ScrollView中的VerticalScrollExtent是什么?相关的知识,希望能为你提供帮助。
从我的一个问题的答案,我发现了一个允许项目重新排序的Google Demo of a ListView subclass。
该演示工作得很好,但我很难理解它是如何工作的:当一个项目被拖动到ListView的边界上方/下方时,ListView开始向上/向下滚动以显示新项目。必要的计算使用底层ScrollView的不同参数:
public boolean handleMobileCellScroll(Rect r) {
int offset = computeVerticalScrollOffset();
int height = getHeight();
int extent = computeVerticalScrollExtent();
int range = computeVerticalScrollRange();
int hoverViewTop = r.top;
int hoverHeight = r.height();
if (hoverViewTop <
= 0 &
&
offset >
0) {
smoothScrollBy(-mSmoothScrollAmountAtEdge, 0);
return true;
}if (hoverViewTop + hoverHeight >
= height &
&
(offset + extent) <
range) {
smoothScrollBy(mSmoothScrollAmountAtEdge, 0);
return true;
}return false;
}
height
is是ListView本身的高度offset
是滚动位置=向上/向下滚动了多少单位/像素range
is是完整内容的高度。extent
- 嗯,这是什么?
计算垂直滚动条拇指在水平范围内的垂直偏移。此值用于计算滚动条轨道内拇指的位置。如果看一下qazxsw poi qazxsw poi不是由其中一个子类实现的,而是仅由
ListView
直接实现:它只返回视图的高度。这是有道理的:如果ListView / ScrollView的高度为500,那么一次可见的滚动内容部分也是500.这是ScrollExtent的含义吗?为什么ScrollExtent必要?为什么不直接使用getHeight()?
我想我错过了一些东西,我对任何暗示感到高兴!
答案这有点晚了,但希望没关系。
1)该方法实际上是由子类实现的。例如,
computeVerticalScrollExtent()
就像View
(code的超类)一样。
2)computeVerticalScrollExtent()
的高度可以与其垂直卷轴的高度不同 - 想象一下带有奇怪的顶部/底部填充的View
。这两点几乎使其他问题无关紧要:)
另一答案
- compute * ScrollOffset- 定义可滚动区域的开头与可滚动区域内当前视图窗口顶部之间的距离。因此,例如,如果您的列表有10个项目并且您已向下滚动以使第3个项目位于最顶部可见项目,则偏移量为3(或3 * itemHeight,请参见下文)。
- compute * ScrollExtent- 定义可滚动区域内当前视图窗口的大小。因此,例如,如果您的列表有10个项目,并且您当前可以看到其中5个项目,那么范围是5(或5 * itemHeight,见下文)。
- compute * ScrollRange- 定义当前可滚动区域的大小。因此,例如,如果您的列表有10个项目,那么范围是10(或10 * itemHeight,见下文)。
特别是,如果启用了“平滑滚动条”功能,RecyclerView的LinearLayoutManager将返回索引,否则它将返回像素值。有关更多信息,请参阅支持库中的this。
补充阅读:
AbsListView
另一答案这是一个示例代码,可以帮助您了解如何使用computeVerticalScrollExtent获取scrollBar的顶部和底部:
ListView
另一答案带有30个项目的ListView的scrollRange等于3000,这是由于scrollRange = numberOfItems * 100,因此scrollExtent = numberOfVisibleItems * 100和scrollOffset = numberOfScrolledItems * 100.您可以在AbsListView的源代码中找到这些单词的evidance
推荐阅读
- 如何在Android中的ListView中突出显示行()
- 如何在xamarin native android中的listview中为项目着色
- Android ListView固定高度项
- 更改了arraylist时,ArrayList和ListView的Android数组适配器不会更新
- Android(requestLayout()调用不当)
- CardView在Android L中没有显示Shadow
- 如何在Android中使用Appcelerator Titanium构建Oauth 2.0
- Android上的Spring OAuth2异常(在路径上找不到类“javax.xml.transform.stax.StAXSource”:DexPathList)
- Linkedin signin(无法检索访问令牌:appId或重定向uri与授权代码或授权代码已过期不匹配)