疑虑
之前搞view滑动的时候就一直有一个疑虑为什么scroll滚动的方法,scrollTo,scrollBy 的时候里面传入的数值会与手指移动的数值(stop-start)相反,
首先要明白两个scrollXX方法改变的是mScrollX, mScrollY,scroll移动的是view的内容,而不是view的坐标
那么就抱着这个去看看源码,view因为mScrollX,mScrollY的转变而做了什么,全局搜索后发现,view在onDraw里面调用了canvas.translate(-mScrollX, -mScrollY);
这个方法,所以是与传入的值相反,也就是你手指往上移动,内容会向下移动,总会与touchEvent移动的相反。
但是为什么对传入的值进行的负转换,这是为什么呢,后在在《android开发艺术探索》中原话如下
mScrollX的值总是等于view的左边缘和view内容左边缘
其中view的左边缘是不会变的,所以是相反的canvas移动。
例如:内容向上移动,canvas要相应的向上平移,所以会调用canvas.translate(0, -y);
看别人博客,有一个口诀不错 正负,上下,左右。
网友评论