属性动画一
来源:互联网 发布:守望先锋左上角数据vrm 编辑:程序博客网 时间:2024/05/22 14:48
Animation 与 Animator
动画我们一般分为传统动画Animation和属性动画Animator
Animation动画的原理是不断调用onDraw方法不断的重新绘制控件,可以实现 旋转,位移,缩放,透明度。
属性动画顾名思义,是不断调用控件属性的get set方法去真实地改变控件的属性
相对于属性动画,Animation动画只能改变控件的显示,不能真正地改变控件的属性,对于需要交互的控件是不适用的
所以 Android3.0引入了属性动画
Animator简单使用
1.简单的平移示例
translationX表示控件在X方向上的偏移量,初始值一般为0,这样动画起始不会突兀
float可以是多个参数,用,隔开,动画分多段进行
ObjectAnimator.ofFloat(button,"translationX",0f,200f).setDuration(1000).start();
translationX translationY rotation rotationX rotationY scaleX scaleY alpha
rotationX是绕X轴旋转,(还有那么点立体的感觉)
2.多个动画同时start,其实是一个异步的过程
ObjectAnimator.ofFloat(imageView,"rotation",0f,360f).setDuration(1000).start();ObjectAnimator.ofFloat(imageView,"translationX",0f,200f).setDuration(1000).start();ObjectAnimator.ofFloat(imageView,"translationY",0f,200f).setDuration(1000).start();这三个动画效果是同时进行的
3.也可以使用PropertyValuesHolder先将要同时进行的动画属性名与属性值保存起来,使用ofPropertyValuesHolder方法展示动画,
效果与以上相同,并且,该方法在性能上是有所优化的
PropertyValuesHolder p1=PropertyValuesHolder.ofFloat("rotation",0f,360f);PropertyValuesHolder p2=PropertyValuesHolder.ofFloat("translationX",0f,200f);PropertyValuesHolder p3=PropertyValuesHolder.ofFloat("translationY",0f,200f);ObjectAnimator.ofPropertyValuesHolder(imageView,p1,p2,p3).setDuration(1000).start();
ObjectAnimator animator1=ObjectAnimator.ofFloat(imageView,"rotation",0f,360f);ObjectAnimator animator2=ObjectAnimator.ofFloat(imageView,"translationX",0f,200f);ObjectAnimator animator3=ObjectAnimator.ofFloat(imageView,"translationY",0f,200f);AnimatorSet set=new AnimatorSet();set.playTogether(animator1,animator2,animator3);set.setDuration(1000);set.start();但是AnimatorSet有丰富的功能,例如,替换playTogether方法为
set.playSequentially(animator1,animator2,animator3);
这三个动画就会按先后顺序一一执行,每个动画执行时间都是1秒
也可以使用play, with, after 来进行单独的执行顺序的控制
with表示同时,即先同时执行2,3,然后执行1,每步都是1s
set.play(animator2).with(animator3);set.play(animator1).after(animator2);
Animator动画监听事件
ObjectAnimator animator=ObjectAnimator.ofFloat(imageView,"rotation",0f,360f);animator.setDuration(1000);animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } });animator.start();
大部分时候也许只需要监听onAnimationEnd,可以通过添加AnimatorListenAdapter,只监听需要监听的事件
animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); //方法体 }});
可以使用插值器,给动画增加更多 多变的效果
安卓内置了很多插值器,基本能满足使用需求
AccelerateDecelerateInterpolator, AccelerateInterpolator, AnticipateInterpolator, AnticipateOvershootInterpolator, BaseInterpolator, BounceInterpolator, CycleInterpolator, DecelerateInterpolator, FastOutLinearInInterpolator, FastOutSlowInInterpolator, LinearInterpolator, LinearOutSlowInInterpolator, OvershootInterpolator, PathInterpolator
animator.setInterpolator(new BounceInterpolator());
以下是常用插值器的效果一览图,横轴是时间,纵轴是变化量
以上内容整理自慕课网
- (一)认识属性动画
- 属性动画一
- Android属性动画一
- Android动画属性一
- 属性动画一
- Android动画 帧动画、补间动画、属性动画 (一)
- Android动画--属性动画总结(一)
- Android 动画之属性动画(一)
- Android动画机制-属性动画(一)
- 一、属性动画(Property Animation)
- android属性动画详解一
- Android 属性动画 (一)
- Android 属性动画(一)
- 安卓属性动画一
- Android属性动画详解(一),属性动画基本用法
- Android属性动画详解(一),属性动画基本用法
- Android动画学习-视图动画&属性动画(一)
- android动画基础(一) View动画和属性动画
- nio Selector 阻塞 唤醒 原理
- wsimport的使用
- Spring框架(一)环境搭建、配置(xml、注解)、整合JDBC以及项目详解
- Sort Colors -- LeetCode
- 十进制转八进制
- 属性动画一
- 我们这一代人的困惑 - 转载
- UVA 1030 Image Is Everything
- 正则表达式语法等价字符/常用运算符/分割语法/正则等价简写释义速记理解技巧
- 11.2 自增键、行集
- CentOS7修改服务器主机名方法
- MySQL
- 欢迎使用CSDN-markdown编辑器
- 知识库--Concurrency+Determining the Number of Threads(76)