一.scrollTo和scrollBy区别
首先这两个方法都是View中方法,用来实现view的滑动的,但是它不滑动view本身,只滑动view的内容 。
其中x、y表示你要滑动到的x 、y坐标;虽然scrollBy()方法内部也是调用了scrollTo()方法,但是两个方法实现方式有所不同,看源码:
/**
* Set the scrolled position of your view. This will cause a call to
* {@link #onScrollChanged(int, int, int, int)} and the view will be
* invalidated.
* 设置视图的滚动位置。这将导致调用
* {@link #onScrollChanged(int, int, int, int)}和视图重绘。
* @param x the x position to scroll to 表示要滚动到的X位置
* @param y the y position to scroll to 表示要滚动到的y位置
*/
public void scrollTo(int x, int y) {
if (mScrollX != x || mScrollY != y) {
int oldX = mScrollX;
int oldY = mScrollY;
mScrollX = x;
mScrollY = y;
invalidateParentCaches();
onScrollChanged(mScrollX, mScrollY, oldX, oldY);
if (!awakenScrollBars()) {
postInvalidateOnAnimation();
}
}
}
/**
* Move the scrolled position of your view. This will cause a call to
* {@link #onScrollChanged(int, int, int, int)} and the view will be
* invalidated.
* 移动视图的滚动位置。这将导致调用
* {@link #onScrollChanged(int, int, int, int)}和视图将被重绘。
* @param x the amount of pixels to scroll by horizontally 要水平滚动的偏移量
* @param y the amount of pixels to scroll by vertically 表示要垂直滚动的偏移量
*/
public void scrollBy(int x, int y) {
scrollTo(mScrollX + x, mScrollY + y);
}
由源码可以知道:
-
View#scrollTo(int x,int y)表示设置视图滚动到(x,y)坐标位置,
View#scrollBy(int x, int y)表示在水平方向和垂直方向的偏移量。 -
scrollTo和scrollBy方法,每次坐标改变(也就是mScrollx和mScrolly与传入x和y有一个不一致),都会回调onScrollChanged(int, int, int, int),并且调用postInvalidateOnAnimation()重新绘制视图。
二.getX、getRawX和getScrollX区别
1.getX()和getRawX()区别
getX():获取点击事件相对控件左边的x轴坐标,即点击事件距离控件左边的距离
getY():获取点击事件相对控件顶边的y轴坐标,即点击事件距离控件顶边的距离
getRawX():获取点击事件相对整个屏幕左边的x轴坐标,即点击事件距离整个屏幕左边的距离
getRawY():获取点击事件相对整个屏幕顶边的y轴坐标,即点击事件距离整个屏幕顶边的距离
2.getScrollX()和getScrollY()与getX()和getY()区别
2.1.getScrollX()和getScrollY()含义
getScrollX()和getScrollY()获取的就是scrollTo(int x,int y)方法中的mScrollX、mScrollY的值。
mScrollX:表示离View起始位置的X水平方向的偏移量
mScrollY:表示离View起始位置的Y垂直方向的偏移量
2.2.getScrollX()和getScrollY()与getX()和getY()的区别
例子:如下视频向下滑动,观察getScrollY()、getY()。
RV下滑刷新
下面两张图分别是getY()、getScrollY()打印结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/56cb00bb83b64d0a9bd90e68a186dee1.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/47b861d78414433abb089e91957c3684.png)
可以看到,下滑过程中getY()值开始正增长, getScrollY()则相反为负增长。
可以得出结论:
getScrollY()为正时,即view往上偏移了;为 0 时,位置未发生了变化;为负即view往下偏移了;
getScrollX()为正时,即View往左偏移了;其他类似;
getX()为正时,手指相对View左边向右滑动的距离;
getY()为正时,手指相对View顶部向下滑动的距离;