您的位置:首页 > 移动开发 > Android开发

ScrollView 监听当前的高度改变

2013-07-25 11:12 288 查看
最近在使用ScrollView的时候遇到一些问题。查看API我们很容易发现使用ScrollView的scrollTo(x, y)很容易的使ScrollView定位到某个位置。

但是如果我在ScrollView中包含了一个TextView对象,我通过getScrollY()的方法取得了当前的高度,并保存了位置。后面就可以使用scrollTo(x, y)定位了。似乎一切都没有问题。但是,我如果允许用户设定TextView里面的文字大小的话,当TextView包含的内容很长的话,你原先保存的位置和能已经差的很远了。

这时我们似乎需要一个百分比的位置来解决这个问题。但Google似乎认为现有的方法已经够了,你们不可能有这么“复杂”的要求。无奈啊!

既然没有就自己想办法啦, 简单一看,发现ScrollView的对象有一个computeVerticalScrollRange() 方法, 当然这个方法是protected的,你是没有办法直接调用的。这就简单了,创建一个类继承ScrollView, 新建一个方法,把这个方法设置成public的,在里面调用computeVerticalScrollRange(), 一切问题都解决了。

?
code
这时,getTotalVerticalScrollRange()就可以计算出当前总的高度,再结合getScrollY(), 就可以计算出高度的百分比。改变文字大小的时候, 取到新的总高度,乘以百分比就可以定位到原先的位置了。

当然, xml里面就要这么调用了

?
code
附件是一个实例代码。里面还包含了一个ScrollView改变的时候的监听动作, 如果你要在用户拉多ScrollView作出额外动作的时候,可以参考。

创建一个Listener

?
code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android srollView