Android 中的动画 Animation
一, 概要
android3.0之前 执行两种动画, 帧动画 和 补间动画
android3.0之后 引入了一个新的动画: 属性动画
二,分类
帧动画 Frame
补间动画 Tween
透明度补间动画
缩放补间动画
旋转补间动画
移动补间动画
属性动画 Property
三, 帧动画 Frame Drawable Animation <一组图片> GIF文件
每一张静止的图片显示出来, 利用人眼睛的错觉, 得出的动画
创建方式
1, 资源文件创建方式
1.1 在res中创建drawable文件夹
1.2 创建动画的文件 ***.xml 标签:
1.3 在代码中或者在布局页面中, 设置ImageView的背景动画资源 android:background=""
1.4 获得AnimationDrawable动画管理器, 调用start() 开始播放动画, 调用stop()停止播放
2, java代码创建方式
2.1 在代码中获得AnimationDrawable动画管理器
2.2 向动画管理器中添加动画
2.3 为图片设置动画
2.4 调用AnimationDrawable中start() 开始播放动画, 调用stop() 停止播放
3, 设置动画播放的次数
//if true: 执行一次 , if false: 重复执行
drawable.setOneShot(false);
四, 补间动画
补充中间的动画
开发者只需要设置开始和结束的动画, 中间的动画是由系统计算补齐
主要分为: 透明度/ 缩放/ 旋转/ 平移 / set(集合)
创建方式:
1, 资源文件中
存放的目录: res/anim/
透明度
缩放
旋转
平移
组合动画
步骤:
在res/anim/ 创建xml的资源文件
在java代码中 startAnimation(AnimationUtils.londAnimation(上下文对象,anim的资源文件id));
2, java代码中
2.1 得到Animation对象
2.2 为控件启动动画
五, 为Activity的切换添加动画
//为Activity添加动画
/**
* enterAnim 进入的动画
* exitAnim 出去的动画
*/
overridePendingTransition(R.anim.anim01, R.anim.anim02);
六, 属性动画 Property 3.0后出现 增强版补间动画
存放的文件夹: res/animator/***.xml
属性动画和补间动画区别
1, 补间动画可以设置4个方向的动画, 属性动画指定任意动画
2, 补间动画是针对UI控件执行的动画, 属性动画是针对对象进行的动画
3, 补间动画移动后, 控件的实际位置没有变化 ; 属性动画会随着位置的变化而变化
属性名称:
位移: translationX translationY
旋转: rotation rotationX ratationY
缩放: scaleX scaleY
透明度: alpha
创建方式
1, xml的方式
1.1 res中创建文件夹 animator, 并且在文件夹中创建.xml的文件
1.2 在代码中加载资源文件中的动画
ObjectAnimator animator = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.anim_scalex);
1.3 设置要执行该动画的对象
animator.setTarget(iv);
1.4 启动动画
animator.start();
2, 代码的方式
单个动画:
ObjectAnimator animator = ObjectAnoimator.ofFloat(目标对象,属性名称,可变参数的值);
animator.start();
集合:
AnimatorSet set = new AnimatorSet();
//定义每个动画
ObjectAnimator animator1 = ObjectAnoimator.ofFloat(目标对象,属性名称,可变参数的值);
ObjectAnimator animator2 = ObjectAnoimator.ofFloat(目标对象,属性名称,可变参数的值);
List list = new ArrayList();
list.add(animator1);
list.add(animator2);
//把动画添加到集合中
set.playSequentially(list);//依次执行
//set.playTogether(list);//一起执行
//第二种方式
//set.play(animator1).with(animator2); 一起执行
//play() with() after() before()
set.start();
监听器:
alphaAnimator.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
// TODO 动画开始时, 执行
}
@Override
public void onAnimationRepeat(Animator animation) {
// TODO 动画重复的时候, 执行
}
@Override
public void onAnimationEnd(Animator animation) {
// TODO 动画结束时,执行
}
@Override
public void onAnimationCancel(Animator animation) {
// TODO 动画取消时执行
}
});