赞
踩
最近在项目中遇到一个问题,需要通过点击几个按钮在scrollview中不断切换滚动到指定位置。
首先想到的是用ScrollView.scrollTo(x,y)滚动到指定位置,但是调用之后貌似并没有什么用。查资料得知当我们在onCreate()里调用scrollTo(x,y)方法时,activity的ui初始化还未完成,就如在oncreate()里调用View.getHeight()方法得不到正确的数据一样。所以正确的方法应该是通过handler来处理。
private Handler handler = new Handler();
/**
* 滑动到指定位置
*/
private void scrollToPosition() {
handler.post(new Runnable() {
@Override
public void run() {
svPersonalInfo.scrollTo(0, llOverBook.getHeight());
}
});
}
scrollTo(scrollX, scrollY)
这个方法文档中说的是滑动View中的内容,并不是滑动View本身。也就是说当TextView调用这个方法时,改变的只是TextView里面的文字,TextView本身并不改变,不过当把TextView设为全屏,或者背景与父容器相融时看起来好像滑动的是TextView。
scrollX,scrollY这两个参数指的是相对于原位置的偏移量,可以理解由原位置的坐标减去偏移后的坐标,注意这个便宜后原来的View坐标没变,只是内容位置改变。所以scrollX,scrollY参数的方向与值的正负相反,即scrollX为正,向左便宜,为负数则向右便宜。scrollY正向上,负向下。
scrollBy(x, y)
需要注意的是,scrollTo(scrollX, scrollY)中的参数始终与View做比较,就是说,多次调用此方法时无其他情况下只会调用一次,因为内部做过一次比较scrollX与内部测出来的数据不等的时候才会调用。而scrollBy(x, y)这是每次都与上次比较,也就是说多次调用可以一直移动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。