本篇笔记我们讲view的滑动。本来说上一节讲呢,但是我们提前做了一些铺垫知识,所以,我们本节开始正式讲view的滑动。
作为一个android开发者,我们见到的大多数页面或者view都或多或少的能够滑动,因此,view的滑动是android的重中之重,也是android开发的基础,所以我们必须搞明白view的滑动的原理以及实现方式!
那么,要想使一个view能够滑动,我们要去怎么做呢?
1、使用scrollTo/scrollBy
这两个方法是android官方帮我们实现的,上一节我们在讲解Scroller的时候就提到过view 的这两个方法。而且我们也知道了这两个方法对于view的滑动是瞬间完成的,没有过渡的过程。那么这两个方法有什么区别呢?
scroll源码.png
通过源码我们可以看出,scrollBy调用了scrollTo方法。scrollTo是滑动到给定的目标位置,即基于所传递的参数的绝对滑动。而scrollBy是基于当前位置的相对滑动,即在当前的位置处继续滑动所传递参数的距离。
这里特别值得注意的是view内部mScrollX、mScrollY属性的值的变化。 mScrollX总是等于view左边缘和view内容左边缘在水平方向的距离,mScrollY同理。而scrollTo和scrollBy只能滑动view内容的位置,而不能滑动view的位置。mScrollX和mScrollY的单位为像素,当view的左边缘在view内容左边缘的右边时,mScrollX为正值。因此,当view通过scrollTo或者scrollBy向右边滑动时,mScrollX的值为负值,反之为正。可能我们这样讲解不是很明了,因此我们通过图形来表达。
mScrollX为初始值.png mScrollX为负.png mScrollX为正.png
如图1所示:黑色框代表屏幕:红色框代表view的位置,蓝色框和黄色框组成的图形为view内容的位置。当view没有移动时,view的位置和view内容的位置为初始值,因为view 的左边缘位置在view内容的左边,因此为-20。
图2所示,当调用scrollTo或者scrollBy方法向右移动时,view 的左边缘与view内容的左边缘距离增大,又因为view 的左边缘位置在view内容的左边,因此为-100。
图3所示,当调用scrollTo或者scrollBy方法向左移动时,view 的左边缘与view内容的先重叠后又分开,又因为view 的左边缘位置在view内容的右边,因此为-80。
以上即为mScrollX的变化规律示意图,mScrollY以此逻辑推理即可。
网友评论