View实现弹性滑动
来源:互联网 发布:软件手术刀怎么用 编辑:程序博客网 时间:2024/06/05 13:50
实现方式
一、Scroller
Scroller典型的使用方法:
Scroller mScroller = new Scroller(mContent);private void smoothScrollerTo(int destX, int destY){ int scrollX = getScrollX(); int deltaX = destX - scrollX; mScroller.startScroll(scrollX, 0 ,deltaX, 0 ,1000); invalidate();//导致View重绘,调用draw的computeScroll方法}//View的draw方法中调用publis void computeScroll(){ if(mScroller.computeScrollOffset()){ scrollTo(mScroller.getCurrX(),mScroller.getCurrY()); postInvalidate();//导致View再次重绘,调用draw的computeScroll方法 }}
Scroller工作原理:Scroller本身并不能实现View的滑动,它需要配合View的computeScroll方法才能完成弹性滑动的效果,不断地让View重绘,而每一次重绘距离滑动起始时间有一个时间间隔,通过这个时间间隔Scroller就可以得到View当前的滑动位置(时间的百分比得到可移动距离),知道了滑动位置就可以通过scrollTo方法来完成View的滑动。这样每次View重绘都会导致View进行小幅度的滑动,而多次小幅度的滑动就组成了弹性滑动。
这里的滑动指的是View内容的滑动,而并非View本身位置的改变
二、动画
final int startX = 0;final int deltaX = 100;ValueAnimator animator = ValueAnimator.ofInt(0,1).setDuration(100);animator.addUpdateListener(new AnimatorUpdateListener(){ @Override public void onAnimationUpdate(ValueAnimator animator){ float fraction = animator.getAnimatedFraction(); mButton1.scrollTo(startX +(int)(deltaX * fraction),0); }});animator.start();
在动画的每一帧到来时获取动画完成的比例,然后再根据这个比例计算出当前View所要滑动的距离。实质上还是采用scrollTo来完成滑动,所以滑动的依旧是View的内容而并非View本身。可以发现,这个方法与Scroller比较类似,都是通过改变一个百分比配合scrollTo方法来完成View的滑动。
三、使用延时策略
通过发送一系列延时消息从而达到一种渐进式的效果,具体来说可以使用Handler或View的postDelayed方法,也可以使用线程的sleep方法。对于postDelayed方法,可以通过它来延时发送一个消息,然后在消息中来进行View的滑动,如果接连不断地发送这种延时消息,那么就可以实现弹性滑动的效果。对于sleep方法,通过在while循环中不断地滑动View和sleep,就可以实现弹性滑动的效果。
阅读全文
0 0
- View实现弹性滑动
- Scroller实现View弹性滑动
- 使用Scroller实现View的弹性滑动
- View弹性滑动
- View的弹性滑动
- Android Scroller类详解--实现View内容弹性滑动
- View弹性滑动的几种实现方法
- 自定义View—弹性滑动
- 实现弹性滑动
- Scroller实现弹性滑动
- 初识自定义View-View的弹性滑动
- View的事件体系(上)(View基础知识,滑动,弹性滑动)
- View的滑动之瞬间滑动与弹性滑动
- Android View 的弹性滑动: Scroller使用说明
- 自定义View——弹性滑动
- 自定义View(四)弹性滑动Scroller
- 使用Scoller实现弹性滑动
- 使用Scroller实现弹性滑动
- 如何直接引用微信的图片链接详解
- Java异常处理
- Famous Stone Collector HDU
- Python学习(一)
- 亲身体验行为驱动开发
- View实现弹性滑动
- 关于body添加position:fixed会返回到网页顶部的问题
- jsessionid用途
- c++头文件
- Hello Python!!!
- 带你轻松了解Android 设计模式——Builder模式
- 一段在京实习的经历
- 前端挑战之js编程题(1)
- LeetCode 500 Keyboard Row