动画
有道地址: http://note.youdao.com/noteshare?id=2b872250a6f97b877e48aab26069834b&sub=D0C3896DD6424D5DAA0E5D0AFF8B4892
http://note.youdao.com/noteshare?id=1118ead60b64fe5ffb4a65eecf2ed502&sub=67E44160F15E453EB7D9F433F5D14FC9
一, 分类
3.0以前 2种
帧动画 Frame Animation -- Drawable Animation
一帧一帧的把一组图片播放出来
创建方法 -- 2中
资源文件
/*
* 1, 在res/drawable 文件中创建一个xml 个是的文件, 根节点为<animation-list></animation-list>
* 2, 需要在根节点中, 添加每一帧图片
* <item android:drawable="图片的id" android:duration="持续的时间 (毫秒)"/>
* 3, 在布局页面中, ImageView 控件中引入 : <ImageView android:background = "帧动画资源的id"/>
* 4, 在Activity 中, 得到动画资源管理器对象
* AnimationDrawable animationDrawable = (AnimationDrawable)mIv.getBackground();
* 5, 调用 animationDrawable.start() ; 开启动画
* 6, 调用 animationDrawable.stop(); 停止动画
*/
代码创建
/**
* 代码的方式创建帧动画
* 1, 初始化动画管理器对象
* AnimationDrawable drawable = new AnimationDrawable();
* 2, 向动画管理器中添加图片资源
* drawable.addFrame(Drawable类型的图片, 持续时间 毫秒);
* 3, 设置动画是否执行一次
* drawable.setOneShot(false); // true 执行一次; false 执行多次
* 4, 将动画资源, 设置到图片中
* mIv.setImageDrawable(drawable);
* 5, 调用方法 start() 开启动画 --- drawable.isRunning() 判断动画是否正在执行
* drawable.start();
* 6, 调用方法 stop() 停止动画
* drawable.stop();
*/
补间动画 Tween Animation -- View Animation
概念: 开发者值需要指定开始和结束动画, 中间有系统自动补齐
分类: 渐变 缩放 旋转 位移 集合
创建方式:
资源文件
存放的目录: res/anim
渐变 <alpha/>
缩放 <scale/>
旋转 <rotate/>
位移 <translate/>
集合 <set/>
步骤:
/**
* 资源文件创建的补间动画
* 1, res 的文件夹中 , 创建 anim文件夹
* 2, 在res/anim 文件夹中, 创建一个xml 个是的动画, 根节点<alpha , scale, rotate,translate, set>
* 3, 在Activity 中, 启动动画
* mIv.startAnimation(AnimationUtils.loadAnimation(上下文对象, 动画的资源id));
*/
代码创建
/**
* 代码创建补间动画
*
* 1, 声明每一种动画资源, 设置参数信息
* 2, 设置持续时间
* 3, 为控件启动动画
* mIv.startAnimation(animation);
*
*/
补间动画 --- 实现Activity 的切换动画 -- //只能是补间动画完成
//添加切换的动画 -- 补间动画 -- res/anim 文件夹
//进入时的动画 -- InfoActivity, 退出时的动画 -- MainActivity
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
X ----> -100% 左侧 0%当前 100% 右侧
Y ----> -100% 上方 0%当前 100% 下方
3.0以后 属性动画 Property Animation
通过属性动画的方式改变控件的属性, 属性动画更改的是对象的实际属性
而补间动画, 更改的View 的绘制效果, 真正的属性依然保留在以前的位置上
总结: 属性动画是 补间动画的升级版
创建:
存放路径: res/animator
单个动画: <objectAnimator/> -- 区分是什么类型的动画
通过属性来区分: android:propertyName = "属性名称"
属性名称:
位移: translationX translationY
旋转: rotation rotationX rotationY
缩放: scaleX scaleY
透明: alpha
集合动画: <set></set>
创建方式 --- 2中
资源文件
/**
* 资源文件 , 创建属性动画
*
* 1, 在res 中 创建文件夹, animator 文件夹, 在该文件夹中, 创建xml 的文件
*
* 2, 在文件中创建动画
* 单个动画 --- <objectAnimator></objectAnimator>
* 多个动画 --- <set></set>
*
* 3, 在Activity 中加载动画
* 3.1 加载动画资源 -- 动画加载器 AnimatorInflater
* ObjectAnimator animator = AnimatorInflater.loadAnimator(上下文对象, 动画资源的id);
* 3.2 设置执行该动画的控件
* animator.setTarget(mIv);
* 3.3 启动动画
* animator.start();
*/
代码创建
/**
* 1, 定义动画对象
* 执行动画的控件, 动画的属性名称 , 动画的属性值 -- 可变长度的数组
* 属性名称:
位移: translationX translationY
旋转: rotation rotationX rotationY
缩放: scaleX scaleY
透明: alpha
* ObjectAnimator alpha = ObjectAnimator.ofFloat(mIv,"alpha",1.0f,0.0f,1.0f);
* 2, 设置动画的持续时间
* alpha.setDuration(5000);
* 3, 启动动画
* alpha.start();
*/
集合动画:
//集合
//1, 创建集合对象
AnimatorSet animatorSet = new AnimatorSet();
//2, 创建每一个动画
ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(mIv,"rotation",0,360);
ObjectAnimator translationYAnimator = ObjectAnimator.ofFloat(mIv,"translationY",0,900);
//3, 把单个动画添加到集合中
//第一种方式
// List<Animator> list = new ArrayList<>();
// list.add(rotationAnimator);
// list.add(translationYAnimator);
// //animatorSet.playSequentially(list);//依次执行
// animatorSet.playTogether(list);//一起执行
//第二种方式 -- 注意: 同一个动画, 只能被使用一次
animatorSet.play(rotationAnimator).with(translationYAnimator);
//4, 设置持续时间
animatorSet.setDuration(5000);
//5, 启动动画
animatorSet.start();
作业:
* 1, 完成今天课堂代码 -- 补间
* 2, 利用补间动画, 自己组合一个动画, 出现比较炫的效果 -- 必须