如何获取ScrollView总滚动量?getMaxScrollAmount()返回值异常求助
关于ScrollView总滚动量获取与getMaxScrollAmount()异常的解答
嘿,我来帮你理清这个问题~
一、正确获取ScrollView总滚动量的方法
你自己摸索出来的思路方向是对的,准确来说,总滚动量应该是子视图的总高度减去ScrollView自身的可视高度——毕竟只有当子视图比ScrollView高的时候,才会产生可滚动的空间。具体可以用这两种靠谱的方式:
- 方式一:直接通过子视图和ScrollView的高度计算
int totalScrollRange = scrollView.getChildAt(0).getHeight() - scrollView.getHeight(); - 方式二:使用官方提供的滚动范围计算方法
int totalScrollRange = scrollView.computeVerticalScrollRange() - scrollView.computeVerticalScrollExtent();
这两种方法得到的结果完全一致,都能准确反映你需要的真实Y轴总滚动量。
二、getMaxScrollAmount()返回异常的原因
你踩了一个很容易忽略的坑——这个方法根本不是用来获取整个ScrollView的总滚动范围的!它的设计目的是控制ScrollView在快速滑动(fling)操作时的单次最大滚动偏移量,属于系统内部用来优化滑动体验的参数,和整个内容的总高度没有任何关系。
所以当你放入1MB的长文本时,它返回的865只是系统预设的单次fling的最大滚动值,自然和真实的760000左右的总滚动量相差巨大。以后别再用这个方法来获取总滚动范围啦~
内容的提问来源于stack exchange,提问作者SunSpike
相关产品推荐
相关产品推荐

