Android View 的弹性滑动: Scroller使用说明
2016-03-06 18:54
585 查看
我在实现View滑动的方法总结这篇博客中介绍了View滑动的三种方法,没看过的可以先去看一下。
这篇文章主要讲解View的弹性滑动,即它滑动时会有一个过程,实现方法包括 Scroller、属性动画、使用延迟策略 这三个方法。
实现弹性滑动的思想:将一次大的滑动分成若干次小的滑动,并在一个时间段内完成。
具体方法讲解:
getScrollX() 就是当前View的左上角相对于父布局左上角的x轴偏移量;
getScrollY() 就是当前View的左上角相对于父布局左上角的y轴偏移量;
使用Scroller时,要在自定义的ViewGroup中使用,在onTouchEvent()方法中调用我们自己定义的方法,如下:
这里的smoothScrollBy方法就是当我们需要滑动时,要调的方法。其中dx、dy都是末位置减去起始位置的坐标 。然而仅仅是scroller.startScroll()方法是无法让View滑动的,invalidate()方法才会导致View重绘,此时会调用View的draw方法,然而在draw方法中又会掉用一个方法,如下:(此方法需要我们自己去实现,也在我们自定义的ViewGroup中实现)
代码解析:当View重绘后会在draw方法中调用computeScroll方法,而computeScroll方法又会向scroller获取当前的scrollX和scrollY,然后通过scrollTo方法实现滑动;接着又掉用postInvalidate方法进行第二次重绘,然后就跟第一次重绘一样的流程了,如此反复,直到整个滑动过程结束。
后两种方法就不解释了,可以自己去探索。属性动画会在后面的文章中介绍。
这篇文章主要讲解View的弹性滑动,即它滑动时会有一个过程,实现方法包括 Scroller、属性动画、使用延迟策略 这三个方法。
实现弹性滑动的思想:将一次大的滑动分成若干次小的滑动,并在一个时间段内完成。
具体方法讲解:
利用Scroller 实现弹性滑动
首先我门要明白getScrollX()、getScrollY()的含义:getScrollX() 就是当前View的左上角相对于父布局左上角的x轴偏移量;
getScrollY() 就是当前View的左上角相对于父布局左上角的y轴偏移量;
使用Scroller时,要在自定义的ViewGroup中使用,在onTouchEvent()方法中调用我们自己定义的方法,如下:
private void smoothScrollBy(int dx, int dy) { //参数解释:1、x轴起始位置;2、y轴起始位置;3、x轴的偏移量;4、y轴的偏移量;5、完成这个滑动需要的时间 scroller.startScroll(getScrollX(), 0, dx, 0, 500); invalidate(); }
这里的smoothScrollBy方法就是当我们需要滑动时,要调的方法。其中dx、dy都是末位置减去起始位置的坐标 。然而仅仅是scroller.startScroll()方法是无法让View滑动的,invalidate()方法才会导致View重绘,此时会调用View的draw方法,然而在draw方法中又会掉用一个方法,如下:(此方法需要我们自己去实现,也在我们自定义的ViewGroup中实现)
@Override public void computeScroll() { //computeScrollOffset()返回true,代表滑动还未结束;false 则已结束。 if (scroller.computeScrollOffset()) { scrollTo(scroller.getCurrX(), scroller.getCurrY()); postInvalidate(); } }## 标题 ##
代码解析:当View重绘后会在draw方法中调用computeScroll方法,而computeScroll方法又会向scroller获取当前的scrollX和scrollY,然后通过scrollTo方法实现滑动;接着又掉用postInvalidate方法进行第二次重绘,然后就跟第一次重绘一样的流程了,如此反复,直到整个滑动过程结束。
后两种方法就不解释了,可以自己去探索。属性动画会在后面的文章中介绍。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories