Android 属性动画总小结
来源:互联网 发布:郑州学软件 编辑:程序博客网 时间:2024/05/17 13:42
ObjectAnimator的使用:
ObjectAnimator a = ObjectAnimator.ofFloat(mImageView, "Y", 0.0F,360.0F, 0.0f).setDuration(5000);a.setInterpolator(new BounceInterpolator()); a.start();
这里是对mImageView 的Y坐标进行动画,变化是从0到360再到0;
a.setInterpolator(new BounceInterpolator());是添加的弹性效果。
ValueAnimator 的使用:
ValueAnimator valueAnimator = new ValueAnimator();valueAnimator.setDuration(3000);valueAnimator.setInterpolator(new LinearInterpolator());//添加线性变化率valueAnimator.setObjectValues(new PointF(0, 0));//添加返回的objiect类型,可以自定义valueAnimator.setEvaluator(new TypeEvaluator<PointF>() {@Overridepublic PointF evaluate(float arg0, PointF arg1, PointF arg2) {PointF pointF = new PointF();pointF.x = 900 * arg0;pointF.y = 1000 * 1 / 2 * 9.8f * arg0 * arg0;return pointF;}});valueAnimator.start();valueAnimator.addUpdateListener(new AnimatorUpdateListener() {//这里通过监听获取动画返回obeject的值来对view进行处理,实现了动画的效果@Overridepublic void onAnimationUpdate(ValueAnimator arg0) {PointF pointF = (PointF) arg0.getAnimatedValue();mImageView.setX(pointF.x);mImageView.setY(pointF.y);}});
AnimatorSet 实现多个动画同时使用的效果:
ObjectAnimator a = ObjectAnimator.ofFloat(mImageView, "Y", 0.0F,360.0F, 0.0f).setDuration(5000);ObjectAnimator a1 = ObjectAnimator.ofFloat(mImageView, "X", 0.0F,100.0F, 200.0f).setDuration(5000);a.setInterpolator(new BounceInterpolator());a1.setInterpolator(new BounceInterpolator());AnimatorSet set=new AnimatorSet();set.play(a);set.play(a1);set.start();
LayoutTransition 这个是对viewgroup添加与移除view时添加动画:
LayoutTransition transition = new LayoutTransition();transition.setAnimator(LayoutTransition.APPEARING,transition.getAnimator(LayoutTransition.APPEARING));layout.setLayoutTransition(transition);Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {addbt();});private void addbt() {Button button = new Button(this);button.setText("test");layout.addView(button);}
LayoutTransition.APPEARING View在ViewGroup中出现时,对这个view设置的动画
LayoutTransition.CHANGE_APPEARING View在ViewGroup中出现时,对其他受到影响的viwe设置的动画
重点看看Interpolator:用于动画中的时间插值,其作用就是把0到1的浮点值变化映射到另一个浮点值变化。先看看AccelerateInterpolator,这个是用于加速的,动画一开始是慢,后面慢慢加快;
ObjectAnimator a = ObjectAnimator.ofFloat(mImageView, "Y", 0.0F,360.0F, 0.0f).setDuration(5000);a.setInterpolator(new AccelerateInterpolator());a.start();a.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator arg0) { float c = (float) arg0.getAnimatedValue();Log.i("=============", c + "");mImageView.setAlpha(c);mImageView.setTranslationX(c);mImageView.setTranslationY(c);}});
我们看打印出来的日志就可以看到0开头的个数>1开头的个数>2开头的个数>3开头的个数。。。
打印的时候,每个时间间隔是相同的,那么在相同的距离内,开始时走完这个距离的时间要比以后走完这个距离要花的
时间长,从他打印了更多的点数可以看得出,发过来看,就是在相同的时间内它走的路程更短了,说明速度慢,后面走到路程
更长了,说明速度快,就形成了一个加速的过程。
正如这个图显示的那样,x轴的是时间,y轴的是距离,开始第一个距离内,打印了十个点,就是走了十个时间,第二个距离内打印了5个点,走了五个时间
第三个距离走了三个时间,第四个距离走了两个时间,明显看到了一个加速的过程。
看一下AccelerateInterpolator的源码的核心代码:
public float getInterpolation(float input) { if (mFactor == 1.0f) { return input * input; } else { return (float)Math.pow(input, mDoubleFactor);
}
可以看到返回的值是输入的平方,而Interpolator:用于动画中的时间插值,其作用就是把0到1的浮点值变化映射到另一个浮点值变化。那么就明白了,在一个时间间隔内,本来返回的数值是a,现在返回的是a的平方,数值变小了,当增加到相同间隔的值时,需要花更多的时间了,随着a变大,当增加到相同间隔的值时,花的时间会逐渐变少,因为a变大了,这是我的理解。
0 0
- Android 属性动画总小结
- android属性动画小结
- Android属性动画个人小结
- Android动画--属性动画
- android动画 -- 属性动画
- Android动画-属性动画
- Android动画【属性动画】
- Android动画--属性动画
- Android 动画学习小结
- Android动画实现小结
- Android-动画小结
- Android动画小结
- 学习Android动画小结
- Android动画小结
- Android动画小结
- Android动画小结
- Android动画小结
- Android动画小结
- 复选框的存储信息和回显
- 【练习笔记】剑指offer-变态跳台阶
- Spring+Struts+Hibernate+Mysql
- 黑马程序员——java基础_封装、构造函数
- IP地址的规划和设计方法(三)
- Android 属性动画总小结
- POJ 2386 Lake Counting
- 移植好uboot和基于initramfs根文件系统Linux内核的开发板的启动过程
- 【练习笔记】剑指offer-矩形覆盖
- spring当中的定时任务
- sql server启动服务的方法
- 认识Protel原理图设计环境
- Java 基本介绍
- RequireJS模块化加载