刚刚在学习listview滑动删除,要用到view的scrollBy和scrollTo,就研究了一下,下面分享一下:

先说scrollTo,

scrollTo(int x, int y):传入x,y坐标,将view移动到(-x,-y)位置

scrollBy(int x, int y):传入x,y坐标,将view向x正方向移动-x个单位,向y正方向移动-y个单位

假设x为正数,就向左移,反之向右

下面画个图举个例子:

%E6%97%A0%E6%A0%87%E9%A2%98-241x300.png

红线框代表手机界面,黑框代表一个LinearLayout,id设为llayout;

下面调用:

llayout.scrollTo(-100,0);

效果:

%E6%97%A0%E6%A0%87%E9%A2%98-1-271x300.png

这个时候再调用llayout.scrollTo(-100,0);图像是不会发生变化的,因为这个方法的作用是移动到固定的点

那么,这个时候再调用:llayout.scrollBy(-100,0);

图像就会变成这样:

%E6%97%A0%E6%A0%87%E9%A2%98-3-300x279.png

即向右移动了100px,

这个时候假设再调用llayout.scrollTo(0,0);他又会回到初始位置了

看scrollBy的方法可以看出:

scrollBy也是调用了scrollTo的方法,而参数是当前的Scroll坐标加上传入的坐标,即从当前位置移动(x,y)

public void scrollBy(int x, int y) {

scrollTo(mScrollX + x, mScrollY + y);

}

可能有的同学会问,为什么参数是负的,走的确是正的方向,这个问题在view的某一句源码可以得到解释:

public void invalidate(int l, int t, int r, int b) {

final int scrollX = mScrollX;

final int scrollY = mScrollY;

invalidateInternal(l - scrollX, t - scrollY, r - scrollX, b - scrollY, true, false);

}

负负得正,这样容易理解多了吧,至于为什么要减,各位可以自己去探索

使用通俗话总结下这两个方法:

假如两个人在跑步,scrollTo(-50,0)即移动到第50米,scrollBy(-50,0)即移动50米,当两人位于起点时,两方法等效

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/17193.html

75d087ef9a9fb11dc373caaf33adbf7f.png

微信打赏

支付宝打赏

感谢您对作者kyle的打赏,我们会更加努力!    如果您想成为作者,请点我

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐