简介

动画有下面两种情况同一个图形通过视图在界面上进行透明度,缩放,旋转,平移的变化(View动画)在界面的同一个位置上不断切换显示不同的图片(Drawable动画)动画的分类View AnimationDrawable AnimationAndroid中提供了两种实现动画的方式纯编码的方式Xml配置的方式

View Animation

Animation公用的方法和属性

setDuration(long durationMillis) : 设置持续时间(单位ms)
setStartOffset(long startOffset) : 设置开始的延迟的时间(单位ms)
setFillBefore(boolean fillBefore) : 设置最终是否固定在起始状态
setFillAfter(boolean fillAfter) : 设置最终是否固定在最后的状态
setAnimationListener(AnimationListener listener) : 设置动画监听坐标类型:Animation.ABSOLUTE   :这个是绝对坐标,就是直接写坐标值Animation.RELATIVE_TO_SELF    :这个是相对坐标,而且是相对自己的,以自己的左上顶点为参考点Animation.RELATIVE_TO_PARENT    "这个是相对父节点的左上顶点为参考点启动动画 : view.startAnimation(animation);
结束动画: view.clearAnimation()动画监听器 : AnimationListeneronAnimationStart(Animation animation) : 动画开始的回调onAnimationEnd(Animation animation) : 动画结束的回调onAnimationRepeat(Animation animation) : 动画重复执行

分类

单一动画(Animation)缩放动画(ScaleAnimation)透明度动画(AlphaAnimation)旋转动画(RotateAnimation)平移动画(TranslateAnimation)复合动画(AnimationSet)由多个单一动画组合在一起的动画从下面的关系可以看出Animation和AnimationSet的关系就好像之前
View和Viewgroup的关系一样

ScaleAnimation

编码方式
public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)fromX : 开始时X轴上的缩放比例
toX : 结束时X轴上的缩放比例
fromY :开始时Y轴上的缩放比例
toY :结束时Y轴上的缩放比例pivotXType : X轴坐标的类型(计算x轴上的偏移量的方式)
pivotXVlaue : 中心点在X轴相对视图左顶点在x轴上的偏移量
pivotYType :  Y轴坐标的类型(计算x轴上的偏移量的方式)
pivotYValue : 中心点相对视图左顶点在y轴上的偏移量
 /** 编码实现: 缩放动画 * ScaleAnimation*        //1. 创建动画对象*        //2. 设置*        //3. 启动动画*/public void startCodeScale(View v){tv_animation_msg.setText("Code缩放动画: 宽度从0.5到1.5, 高度从0.0到1.0, "+ "缩放的圆心为顶部中心点,延迟1s开始,持续2s,最终还原");// 1. 创建动画对象ScaleAnimation animation = new ScaleAnimation(0.5f, 1.5f, 0, 1,Animation.ABSOLUTE, iv_animation.getWidth() / 2,Animation.ABSOLUTE, 0);animation = new ScaleAnimation(0.5f, 1.5f, 0, 1,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0);// 2. 设置// 延迟1s开始animation.setStartOffset(1000);// 持续2sanimation.setDuration(2000);// 最终还原animation.setFillBefore(true);// 3. 启动动画iv_animation.startAnimation(animation);}
文件方式
Animation.ABSOLUTE : 数值(默认以px为单位)   100
Animation.RELATIVE_TO_SELF : 百分数,如:50% (以当前视图的宽度或高度其为基数来计算)
Animation.RELATIVE_TO_PARENT : 百分数+p,如:50%p (以父视图的宽度或高度其为基数来计算)
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"android:fromXScale="0"android:fromYScale="0"android:toXScale="1.5"android:toYScale="1" android:startOffset="1000"android:duration="3000"android:pivotX="100%"android:pivotY="100%"android:fillAfter="true"></scale>
 /** xml实现: 缩放动画 * <scale>*//*1. 定义动画文件2. 加载动画文件得到动画对象3. 启动动画*/public void startXmlScale(View v){tv_animation_msg.setText("Xml缩放动画: Xml缩放动画: "+ "宽度从0.0到1.5, 高度从0.0到1.0, 延迟1s开始,持续3s,圆心为右下角, 最终固定");// 1. 定义动画文件// 2. 加载动画文件得到动画对象Animation animation = AnimationUtils.loadAnimation(this,R.anim.scale_test);// 3. 启动动画iv_animation.startAnimation(animation);}

AlphaAnimation

编码方式
public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,int pivotYType, float pivotYValue)fromDegrees : 开始时的角度toDegrees : 结束时的角度pivotXType : X轴坐标的类型pivotXVlaue : X轴坐标的值pivotYType :  Y轴坐标的类型pivotYValue : Y轴坐标的值
 /** 编码实现: 旋转动画 RotateAnimation*/public void startCodeRotate(View v){tv_animation_msg.setText("Code旋转动画: 以图片中心点为中心, 从负90度到正90度, 持续5s");// 1. 创建动画对象RotateAnimation animation = new RotateAnimation(-90, 90,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);// 2. 设置animation.setDuration(5000);// 3. 启动动画iv_animation.startAnimation(animation);}
文件方式
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:fromDegrees="90" android:toDegrees="-90"android:duration="5000"></rotate>
 /** xml实现: 旋转动画 * <rotate>*/public void startXmlRotate(View v){tv_animation_msg.setText("Xml旋转动画: 以左顶点为坐标, 从正90度到负90度, 持续5s");// 1. 定义动画文件// 2. 加载动画文件得到动画对象Animation animation = AnimationUtils.loadAnimation(this,R.anim.rotate_test);// 3. 启动动画iv_animation.startAnimation(animation);}

RotateAnimation

编码方式
 /** 编码实现: 透明度动画 * 完全透明 : 0* 完全不透明 : 1* AlphaAnimation*/public void startCodeAlpha(View v){tv_animation_msg.setText("Code透明度动画: 从完全透明到完全不透明, 持续2s");// 1. 创建动画对象AlphaAnimation animation = new AlphaAnimation(0, 1);// 2. 设置animation.setDuration(4000);// 3. 启动动画iv_animation.startAnimation(animation);}
文件方式
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:fromAlpha="1" android:toAlpha="0"android:duration="4000"></alpha>
 /** xml实现: 透明度动画 * <alpha>*/public void startXmlAlpha(View v){tv_animation_msg.setText("Xml透明度动画: 从完全不透明到完全透明, 持续4s");// 1. 定义动画文件// 2. 加载动画文件得到动画对象Animation animation = AnimationUtils.loadAnimation(this,R.anim.alpha_test);animation.setFillAfter(true);// 3. 启动动画iv_animation.startAnimation(animation);}

TranslateAnimation

编码方式
 /** 编码实现: 平移动画 TranslateAnimation*/public void startCodeTranslate(View v){tv_animation_msg.setText("Code移动动画: 向右移动一个自己的宽度, 向下移动一个自己的高度, 持续2s");// 1. 创建动画对象TranslateAnimation animation = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_SELF, 1,Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_SELF, 1);// 2. 设置animation.setDuration(2000);// 3. 启动动画iv_animation.startAnimation(animation);}
文件方式
<?xml version="1.0" encoding="utf-8"?>
<translatexmlns:android="http://schemas.android.com/apk/res/android"android:fromXDelta="100%p" android:toXDelta="0"android:fromYDelta="0"android:toYDelta="0"android:duration="2000">
</translate>
 /** xml实现: 平移动画 * <translate>*/public void startXmlTranslate(View v){tv_animation_msg.setText("xml移动动画: 从屏幕的右边逐渐回到原来的位置, 持续2s"); // ***此效果用于界面切换的动画效果// 1. 定义动画文件// 2. 加载动画文件得到动画对象Animation animation = AnimationUtils.loadAnimation(this,R.anim.translate_test);// 3. 启动动画iv_animation.startAnimation(animation);}

Code Animation

编码方式
 /** 编码实现: 复合动画 AnimationSet*/public void startCodeAnimationSet(View v){tv_animation_msg.setText("Code复合动画: 透明度从透明到不透明, 持续2s, "+ "接着进行旋转360度的动画, 持续1s");// 1. 创建透明动画并设置AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);alphaAnimation.setDuration(2000);// 2. 创建旋转动画并设置RotateAnimation rotateAnimation = new RotateAnimation(0, 360,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);rotateAnimation.setDuration(1000);rotateAnimation.setStartOffset(2000);// 延迟// 3. 创建复合动画对象AnimationSet animationSet = new AnimationSet(true);// 4. 添加两个动画animationSet.addAnimation(alphaAnimation);animationSet.addAnimation(rotateAnimation);// 5. 启动复合动画对象iv_animation.startAnimation(animationSet);}
文件方式
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" ><alphaandroid:duration="2000"android:fromAlpha="0"android:toAlpha="1" ></alpha><rotateandroid:duration="2000"android:fromDegrees="0"android:startOffset="2000"android:toDegrees="360" />
</set>
 /** xml实现: 复合动画 * <set>*/public void startXmlAnimationSet(View v) {tv_animation_msg.setText("Xml复合动画: 透明度从透明到不透明, 持续2s, 接着进行旋转360度的动画, 持续2s");//1. 定义动画文件//2. 加载动画文件得到动画对象Animation animation = AnimationUtils.loadAnimation(this, R.anim.set_test);//3. 启动动画iv_animation.startAnimation(animation);}

动画监听

在程序中可以对动画的特定时刻进行监听Animation.setAnimationListener(AnimationListener listener) : 设置动画监听动画监听器 : AnimationListeneronAnimationStart(Animation animation) : 动画开始的回调onAnimationEnd(Animation animation) : 动画结束的回调onAnimationRepeat(Animation animation) : 动画重复执行

Interpolator属性

 Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复)等。@android:anim/linear_interpolator  : 线性变化@android:anim/accelerate_interpolator  : 加速变化@android:anim/decelerate_interpolator  : 减速变化@android:anim/cycle_interpolator : 周期循环变化

Drawable Animation

首先新建drawable文件夹下面的xml文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"><itemandroid:drawable="@drawable/nv1"android:duration="500"/><itemandroid:drawable="@drawable/nv2"android:duration="500"/><itemandroid:drawable="@drawable/nv3"android:duration="500"/><itemandroid:drawable="@drawable/nv4"android:duration="500"></item></animation-list>
然后在图片视图里面引用这个文件
    <ImageViewandroid:id="@+id/iv_da_mm"android:layout_width="80dp"android:layout_height="80dp"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_marginTop="160dp"android:background="@drawable/drawable_animation_test"/>
然后还要得到背景动画图片对象来进行启动和停掉
 @Overridepublic void onClick(View v){if (v == btn_da_start){if (animationDrawable == null){// 得到背景动画图片对象animationDrawable = (AnimationDrawable) iv_da_mm.getBackground();// 启动animationDrawable.start();}} else if (v == btn_da_stop){if (animationDrawable != null){animationDrawable.stop();animationDrawable = null;}}}

Android的动画:ScaleAnimation,AlphaAnimation,RotateAnimation,TranslateAnimation,Code,DrawableAnimation相关推荐

  1. ScaleAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation详解

    点击按钮有相应的效果! 解析在代码注释里!!! main.xml <RelativeLayout xmlns:android="http://schemas.android.com/a ...

  2. android 尺寸变化动画,android ScaleAnimation类:尺寸变化动画类

    Android JDK为我们提供了4种动画效果,分别是: AlphaAnimation,RotateAnimation, ScaleAnimation, TranslateAnimation.今天我想 ...

  3. android 尺寸变化动画,Android ScaleAnimation类:尺寸变化动画类

    ScaleAnimation类是Android系统中的尺寸变化动画类,用于控制View对象的尺寸变化,该类继承于Animation类. ScaleAnimation类中的很多方法都与Animation ...

  4. android 动画 alpha,浅析Android 动画之AlphaAnimation应用操作

    作为程序员不管是为了什么,或多或少都会模仿其他人的一些手法来达到效果,程序员都必须要做出各种绚丽的动画画面来吸引大家,下面是爱站技术频道小编浅析 动画之AlphaAnimation应用操作,一起来了解 ...

  5. Android图形动画 使用ScaleAnimation

    使用ScaleAnimation实现了一个类似于翻转的动画效果. 感觉ScaleAnimation算是一个比较好用的动画类了,看了一下API感觉方法和构造方法也都很简单. 就不再赘述太多直接上代码吧- ...

  6. Android之动画

    Android的动画可以分为三种,View动画.帧动画.属性动画.View动画通过对场景里的对象不断做图像变化(平移.缩放.旋转.透明度)从而产生动画效果,它是一种渐进式动画,而且View动画支持自定 ...

  7. Android之动画精讲一:从setTranslationX谈属性动画和view动画的区别

    转载:http://blog.csdn.net/yanzi1225627/article/details/47850471 最近又用到了动画,决定把几次项目里用到的动画走过的弯路总结一下,顺便梳理下a ...

  8. Android Animations动画使用详解

    一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...

  9. android tween动画平移怎么设置时间,android Tween Animation属性设置方法实例

    在Android开发中,Animation是用来给控件制作效果的.大多数的控件都可以用这个类,这个类包含了4种基本动作,分别为移动,旋转,淡入淡出,缩放.在使用Animation时,可以在.java文 ...

最新文章

  1. 【oracle】关于创建表时用default指定默认值的坑
  2. 爬虫遇到路径转换的解决方案
  3. 第一个将Palette Mode引入VVC(H.266),阿里云在JVET会议上引起关注
  4. 51CTO博客首页看到我了
  5. android studio viewo,android studio 3.6.0 绑定视图新特性的方法
  6. slf4j + log4j2配置日志引擎
  7. Perl中删除或替换字符串中特殊字符(如空格)的方法
  8. mongodb插入数据_MongoDB插入
  9. matlab剪切板中内容清除,如何清空剪贴板内容?剪切板内容清理过程
  10. 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
  11. nssa和stub_OSPF stub,totally stub , NSSA , totally nssa
  12. 毕业论文页码格式制作
  13. aviary android sdk,Make Photo Magic 使用Aviary SDK 进行图片编辑开发,功能非常强大!!!!(Aviary SDK安装说明)...
  14. android真机测试什么不同,android真机测试闪退
  15. Pytorch基础操作 —— 8. 张量转置操作
  16. 解决Laragon的nginx/apache重启后网站配置文件被修改的问题 - This file has been modified by another program - 文件auto.conf
  17. 人工智能是什么,机器学习就是人工智能吗?
  18. 最新全国手机号码归属地信息SQLite数据库2019年2月更新
  19. 疫情之下,普通人高薪就业指南:学软件测试,路就不会遥远
  20. 超声波测距仪编程_51单片机控制的超声波测距仪程序

热门文章

  1. 前端地图可视化(arcgis)(简单响应式)--中国地形图,高铁城市数据
  2. Java仿制消灭星星
  3. 简单的局域网共享硬盘,尚未解决,记录一把
  4. 如何录制一个高品质的网页直播视频,录制在线直播视频的快速教程
  5. IDesign C#编程规范(一)
  6. 根据新的地图图幅编号,在openlayers上显示图幅范围和图幅号
  7. spring-boot-starter大力出奇迹
  8. 北汽新能源150北汽160使用六叶树USBCAN卡进行电池均衡
  9. CDIO完整实现必备的几个过程(不成熟的想法,供讨论)
  10. from server (NotFound): pods “XXX“ not found