使用动画完成弹性滑动
来源:互联网 发布:windows smb远程漏洞 编辑:程序博客网 时间:2024/05/29 15:11
使用动画完成弹性滑动
动画本身就是一种渐进的过程,因此通过它来实现的滑动天然就具有弹性的效果。
让一个View在100ms内向左移动100px
ObjectAnimatior.ofFloat(targetView,"translationX",0,100).setDuration(100).start();
我们可以利用动画的特性来实现一些动画不能实现的效果。还拿scrollTo来说,我们也想模仿Scroller来实现View的弹性滑动,那么利用动画的特性,我们可以采用以下方法:
final int startX = 0; final int delteX = 100; ValueAnimator animator = ValueAnimator.ofInt(0,1).setDuration(1000); animator.addUpdateListener(new AnimatorUpdateListener(){ @Override public void onAnimationUpdate(ValueAnimator animator){ float fraciton = animator .getAnimatedFraction(); mButton1.scrollTo(startX + (int) (deltaX * fraction),0); } }); animaiton.start();
ValueAnimatorValueAnimator是整个属性动画机制当中最核心的一个类,前面我们已经提到了,属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等,确实是一个非常重要的类。但是ValueAnimator的用法却一点都不复杂,我们先从最简单的功能看起吧,比如说想要将一个值从0平滑过渡到1,时长300毫秒,就可以这样写:[java] view plaincopyValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); anim.setDuration(300); anim.start(); 怎么样?很简单吧,调用ValueAnimator的ofFloat()方法就可以构建出一个ValueAnimator的实例,ofFloat()方法当中允许传入多个float类型的参数,这里传入0和1就表示将值从0平滑过渡到1,然后调用ValueAnimator的setDuration()方法来设置动画运行的时长,最后调用start()方法启动动画。用法就是这么简单,现在如果你运行一下上面的代码,动画就会执行了。可是这只是一个将值从0过渡到1的动画,又看不到任何界面效果,我们怎样才能知道这个动画是不是已经真正运行了呢?这就需要借助监听器来实现了,如下所示:[java] view plaincopyValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); anim.setDuration(300); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float currentValue = (float) animation.getAnimatedValue(); Log.d("TAG", "cuurent value is " + currentValue); } }); anim.start(); 可以看到,这里我们通过addUpdateListener()方法来添加一个动画的监听器,在动画执行的过程中会不断地进行回调,我们只需要在回调方法当中将当前的值取出并打印出来,就可以知道动画有没有真正运行了。运行上述代码,控制台打印如下所示:从打印日志的值我们就可以看出,ValueAnimator确实已经在正常工作了,值在300毫秒的时间内从0平滑过渡到了1,而这个计算工作就是由ValueAnimator帮助我们完成的。另外ofFloat()方法当中是可以传入任意多个参数的,因此我们还可以构建出更加复杂的动画逻辑,比如说将一个值在5秒内从0过渡到5,再过渡到3,再过渡到10,就可以这样写:[java] view plaincopyValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f); anim.setDuration(5000); anim.start(); 当然也许你并不需要小数位数的动画过渡,可能你只是希望将一个整数值从0平滑地过渡到100,那么也很简单,只需要调用ValueAnimator的ofInt()方法就可以了,如下所示:[java] view plaincopyValueAnimator anim = ValueAnimator.ofInt(0, 100); ValueAnimator当中最常用的应该就是ofFloat()和ofInt()这两个方法了,另外还有一个ofObject()方法,我会在下篇文章进行讲解。那么除此之外,我们还可以调用setStartDelay()方法来设置动画延迟播放的时间,调用setRepeatCount()和setRepeatMode()方法来设置动画循环播放的次数以及循环播放的模式,循环模式包括RESTART和REVERSE两种,分别表示重新播放和倒序播放的意思。这些方法都很简单,我就不再进行详细讲解了。
—郭霖 ValueAnimator
http://blog.csdn.net/guolin_blog/article/details/43536355
0 0
- 使用动画完成弹性滑动
- 使用两种方式完成四种弹性动画
- Android ListView上下滑动弹性动画
- 使用Scoller实现弹性滑动
- 弹性滑动(一)--使用Scroller
- 弹性滑动(二)--使用ViewHelper
- 使用Scroller实现弹性滑动
- 弹性滑动
- 使用延时策略实现弹性滑动
- 使用Scroller实现View的弹性滑动
- android使用延时策略实现弹性滑动
- 弹性动画
- 弹性动画
- 弹性动画
- 弹性动画
- 使用UIView动画完成一个下雪动画
- 滑动盒子/弹性盒子
- Android弹性滑动
- <OJ_Sicily>1214信号分析
- 一篇文章看懂iOS代码块Block
- 【连载】关系型数据库是如何工作的?(14) - 查询管理器之Nested Join
- 给Android ListView添加删除item动画
- 正则表达式基本语法
- 使用动画完成弹性滑动
- 猜数游戏
- 小题目:构造函数,析构函数的顺序(全局变量、静态局部变量)
- 每天一个设计模式之代理模式
- 第10、 11 周--阅读程序1
- 自定义GridView+ScrollView(二)
- 监控和管理Linux进程
- poj 2065 高斯消元
- 实用知识:关于通知里面的 category 使用方法