android中view的滑动策略

view的滑动

1.使用scrollTo/scollBy

从源码上看scollBy实际上也是调用了 scollTo方法,两者区别是,scollBy是实现了基于当前位置的相对滑动,scollTo是基于参数的绝对滑动。另外要理解两个参数mScollX和mScollY,mScollX是view内容左边缘和view的左边缘的距离,mScollY是view内容上边缘和view上边缘的距离。另外scrollTo的滑动只能将view的内容进行移动,不能将view本身移动。

2.使用动画

可以采用view动画和属性动画
view动画是针对view的影像做操作,并不能改变view的位置参数,如果希望动画后状态得以保留,必须将fillafter属性设置为true,否则动画后会瞬间恢复到原来状态。
由于只是针对影像做操作,会出现一个问题,给view设置监听以后,动画后单击新位置无法触发onclick事件。但是单击原来位置还会出现。因为在系统眼里这个view根本没有发生改变。这种问题可以在新位置创建一个和目标view一模一样的,动画以后隐藏旧目标,显现新目标。
属性动画不会出现以上问题,但是android3.0以下无法使用属性动画。只能使用动画兼容库nineoldandroids,本质上仍然是view动画。

3.改变布局参数

这种就是直接更改layoutparams。
三种方式优缺点:
scollTo/scollBy:操作简单适合对view内容滑动
动画:针对于android3.0以上的属性动画,是没有太大缺点的,针对于view动画,不能交互
更改参数:操作复杂


弹性滑动

1.使用scoller

原理:在scoller调用startscoll()方法时,会保存相应的参数(滑动起点,滑动距离,滑动时间等等),然后调用invalidate方法,会导致view重绘,然后再view的draw方法中调用computescoll方法,先获取滑动当前的scorllx和scolly。继而调用scoll方法滑动,然后又调用postinvalidate方法,进行第二次重绘。


image.png

每一次重绘距离上次滑动都会有一个时间间隔,

你可能感兴趣的:(android中view的滑动策略)