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 动画取消时执行 } });新闻热点
疑难解答