android之scroller类

来源:互联网 发布:淘宝退货率太高 编辑:程序博客网 时间:2024/05/22 03:34

android视图所有view继承自view类,在实现view滑动操作中需要借助scroller类保存当前view的位置以及实现view的运动。scroller类中有mScrollX表示当前位置相对view的X轴起始坐标偏移的长度,mScrollY表示当前位置相对于view的Y轴起始坐标偏移的长度,这2个长度可以通过scroller的getScrollX()和getScrollY()来获取。在scroller类提供的API中ScrollTo(int x, int y)和ScrollBy(int x, int y)相对难以理解,接下来分析一下view运动轨迹。

前段已经说了view可以借助scroller来记录当前view的位置。当view初始显示时相对view其实位置偏移量是为0的,当我们点击滑动一个view的时候,可以通过Event事件记录按下时坐标,在不停滑动过程中event会记录滑动的坐标,通过差值就可以计算滑动的距离了(想要直观感受的话可以打开手机"开发者选项"中开启“指针位置”就可以看到屏幕坐标了)。通过这个距离我们可以实现view定位到一个新位置,新位置的定位就是用ScrollBy(int x, int y)来实现的,ScrollBy(int x, int y)的函数实现:

public void  scrollBy(int x, int y){

scrollTo(mScrollX+x, mScrollY+y);

}

可以看出mScrollX和mScrollY表示当前view的偏移位置,参数x和y就是在当前偏移位置的基础上继续偏移(x, y)距离。而scrollTo()函数的参数位置坐标始终是相对view起始坐标的(view坐标原点)。

这个新位置相对于view起始位置的差值就保存在view的mScrollX和mScrollY中了,而当我们继续滑动时(相对上一次滑动我们没有松手),我们会又得到一个滑动的实际屏幕距离,这个距离(x,y)就是scrollBy()函数的参数。

简单来说就是,mScrollX和mScrollY会不停的更新以记录当前view相对于view起始位置偏移的距离,而scrollBy()函数的参数就是在dt时间内移动的距离。

另外VelocityTracker类是一个辅助类,用来追踪触摸事件的速率,可以实现view视图的变速运动。


参考:http://blog.csdn.net/linghu_java/article/details/9087841


0 0
原创粉丝点击