首页 > 系统 > Android > 正文

Android中的常用的动画类型及其本质的区别

2019-11-09 15:23:49
字体:
来源:转载
供稿:网友

Android 中的动画 Animation

一, 概要 android3.0之前 执行两种动画, 帧动画 和 补间动画

android3.0之后 引入了一个新的动画: 属性动画

二,分类

帧动画 Frame补间动画 Tween 透明度补间动画 缩放补间动画 旋转补间动画 移动补间动画属性动画 PRoperty

三, 帧动画 Frame Drawable Animation <一组图片> GIF文件

每一张静止的图片显示出来, 利用人眼睛的错觉, 得出的动画创建方式 1, 资源文件创建方式 1.1 在res中创建drawable文件夹 1.2 创建动画的文件 ***.xml 标签: <animation-list/> 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/ <alpha /> 透明度 <scale /> 缩放 <Rotate /> 旋转 <Translate /> 平移 <set /> 组合动画 步骤: 在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的文件 <objectAnimator/> 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<Animator> list = new ArrayList<Animator>(); 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 动画取消时执行 } });
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表