Android 一般动画Animation和属性动画Animator
-
- 一Animations介绍
- Animations的分类
- Animations的使用方法代码中使用
- Animation的四个子类
- 具体使用方法
- Animator介绍
- Animation和Animator比较
- 关键接口介绍
- Animator使用实例
-
- 布局
- 主函数
- animator_scalexml
-
- 一Animations介绍
一、Animations介绍
Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转、缩放、淡入淡出等,这些效果可以应用在绝大多数的控件中。
Animations的分类
Animations从总体上可以分为两大类:
1、Tweened Animations:该类Animations提供了旋转、移动、伸展和淡出等效果。Alpha——淡入淡出,Scale——缩放效果,Rotate——旋转,Translate——移动效果。
2、Frame-by-frame Animations:这一类Animations可以创建一个Drawable序列,这些Drawable可以按照指定的时间间歇一个一个的显示。
Animations的使用方法(代码中使用)
Animations extends Object implements Cloneable
使用TweenedAnimations的步骤:
1.创建一个AnimationSet对象(Animation子类);
2.增加需要创建相应的Animation对象;
3.更加项目的需求,为Animation对象设置相应的数据;
4.将Animatin对象添加到AnimationSet对象当中;
5.使用控件对象开始执行AnimationSet。
Animation的四个子类:
AlphaAnimation、TranslateAnimation、ScaleAnimation、RotateAnimation
具体使用方法
可以看:http://blog.csdn.net/liujiaoruiit/article/details/48574813
Animator介绍
Animator框架是Android 4.0中新添加的一个动画框架,和之前的Animation框架相比,Animator可以进行更多和更精细化的动画控制,而且比之前更简单和更高效。在4.0源码中随处都可以看到Animator的使用。
Animation和Animator比较
Animation框架定义了透明度,旋转,缩放和位移几种常见的动画,而且控制的是一个整个View动画,实现原理是每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧,如果动画没有完成,继续调用invalidate()函数,启动下次绘制来驱动动画,动画过程中的帧之间间隙时间是绘制函数所消耗的时间,可能会导致动画消耗比较多的CPU资源。
在Animator框架中使用最多的是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator进行更精细化控制,只控制一个对象的一个属性值,多个ObjectAnimator组合到AnimatorSet形成一个动画。而且ObjectAnimator能够自动驱动,可以调用setFrameDelay(longframeDelay)设置动画帧之间的间隙时间,调整帧率,减少动画过程中频繁绘制界面,而在不影响动画效果的前提下减少CPU资源消耗。
关键接口介绍
1. ObjectAnimator介绍
Animator框架封装得比较完美,对外提供的接口非常简单,创建一个ObjectAnimator只需通过如下图所示的静态工厂类直接返回一个ObjectAnimator对象。传的参数包括一个对象和对象的属性名字,但这个属性必须有get和set函数,内部会通过java反射机制来调用set函数修改对象属性值。还包括属性的初始值,最终值,还可以调用setInterpolator设置曲线函数。
2. AnimatorSet介绍
AnimatorSet主要是组合多个AnimatorSet和ObjectAnimator形成一个动画,并可以控制动画的播放顺序,其中还有个辅助类通过调用play函数获得。
3. AnimatorUpdateListner介绍
通过实现AnimatorUpdateListner,来获得属性值发生变化时的事件,在这个回调中发起重绘屏幕事件。
Animator使用实例
布局
"http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:background="#FFB6C1" android:orientation="vertical" tools:context=".MainActivity">
主函数
public void startAnimator(View view){// 图片(mImageView)的横坐标从0到1的渐变过程,效果和翻牌的效果是一样的 ObjectAnimator.ofFloat(mImageView,"scaleX",0.0f,1).setDuration(3000).start(); Animator animator= AnimatorInflater.loadAnimator(getApplicationContext(),R.animator.animator_scale);//图片根据animator_scale中定义的属性实现变化 animator.setTarget(mImageView); animator.start(); }}
animator_scale.xml
"1000" android:propertyName="scaleX" android:valueFrom="1" android:valueTo="2"> "1000" android:propertyName="scaleY" android:valueFrom="1" android:valueTo="2">
更多相关文章
- android调用高版本api函数的兼容性问题
- Android O system函数执行reboot命令失败
- Android属性动画的实现
- Android下使用dlopen函数动态调用.so链接库 [转]
- Android显示GIF动画---------Android开源项目:GifView的使用
- Android FragmentTransactionExtended:使Fragment以多种样式动画