一、Tween动画

Tween动画通过对View的内容完成一系列的图像变化来实现效果(包括平移,缩放,旋转,改变透明度)。主要包括以下4种动画效果:

Android的animation由四种类型组成

在XML文件中:(以下的例子均来自网络,归原作者所有)

  • </set>
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <alpha />
  4. <scale />
  5. <translate />
  6. <rotate />
  7. </set>
* alpha 渐变透明度动画效果
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <alpha
  4. android:fromAlpha="0.2"
  5. android:toAlpha="1.0"
  6. android:duration="3000" />
  7. <!-- 透明度控制动画效果 alpha 浮点型值:fromAlpha 属性为动画起始时透明度 toAlpha 属性为动画结束时透明度 说明:0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 -->
* scale 渐变尺寸伸缩动画效果
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  4. android:fromXScale="0.0"
  5. android:toXScale="1.4"
  6. android:fromYScale="0.0"
  7. android:toYScale="1.4"
  8. android:pivotX="50%"
  9. android:pivotY="50%"
  10. android:fillAfter="true"
  11. android:duration="700" />
  12. <!-- 尺寸伸缩动画效果 scale 属性:interpolator 指定一个动画的插入器 在我试验过程中,使用android.res.anim中的资源时候发现有三种动画插入器 accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 浮点型值: fromXScale 属性为动画起始时 X坐标上的伸缩尺寸 toXScale 属性为动画结束时 X坐标上的伸缩尺寸 fromYScale 属性为动画起始时Y坐标上的伸缩尺寸 toYScale 属性为动画结束时Y坐标上的伸缩尺寸 说明: 以上四种属性值 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 说明: 以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 布尔型值: fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用 -->
  13. </set>
* translate 画面转换位置移动动画效果
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <translate
  4. android:fromXDelta="30"
  5. android:toXDelta="-80"
  6. android:fromYDelta="30"
  7. android:toYDelta="300"
  8. android:duration="2000" />
  9. <!-- translate 位置转移动画效果 整型值: fromXDelta 属性为动画起始时 X坐标上的位置 toXDelta 属性为动画结束时X坐标上的位置 fromYDelta 属性为动画起始时 Y坐标上的位置 toYDelta 属性为动画结束时 Y坐标上的位置 注意: 没有指定fromXType toXType fromYType toYType 时候,默认是以自己为相对参照物 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 -->
  10. </set>
* rotate 画面转移旋转动画效果
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  4. android:fromDegrees="0"
  5. android:toDegrees="+360"
  6. android:pivotX="50%"
  7. android:pivotY="50%"
  8. android:duration="3000" />
  9. <!-- rotate 旋转动画效果 属性:interpolator 指定一个动画的插入器 在我试验过程中,使用android.res.anim中的资源时候发现有三种动画插入器 accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 浮点数型值: fromDegrees 属性为动画起始时物件的角度 toDegrees 属性为动画结束时物件旋转的角度 可以大于360度 说明: 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转) pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 说明: 以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 -->
  10. </set>

在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性:

* AlphaAnimation 渐变透明度动画效果
* ScaleAnimation  渐变尺寸伸缩动画效果
* TranslateAnimation 画面转换位置移动动画效果
* RotateAnimation  画面转移旋转动画效果

  使用代码实现动画:

public LinearLayout getLinearLayout(int key) {
  LinearLayout layout = new LinearLayout(this);
  // 实例化一个AnimationSet对象,该对象里面可以包含多个Animation的动画效果
  AnimationSet animationSet = new AnimationSet(true);
  // 这两个设置时关于动画执行完了之后,是还原前状态,还是停留在执行后的状态
  animationSet.setFillAfter(false);
  animationSet.setFillBefore(true);
  switch (key) {
   case 1:// 渐变透明度动画效果
    AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
    animationSet.addAnimation(alphaAnimation);
    layout.setBackgroundColor(Color.BLUE);
    break;
   case 2:// 渐变尺寸伸缩动画效果
    ScaleAnimation scaleAnimation = new ScaleAnimation(0f, 1f, 0f, 1f,
      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    animationSet.addAnimation(scaleAnimation);
    layout.setBackgroundColor(Color.CYAN);
    break;
   case 3:// 画面转换位置移动动画效果
    TranslateAnimation translateAnimation = new TranslateAnimation(screenWidth, 0,
      screenHeight, 0);
    animationSet.addAnimation(translateAnimation);
    layout.setBackgroundColor(Color.DKGRAY);
    break;
   case 4:// 画面转移旋转动画效果
    RotateAnimation rotateAnimation = new RotateAnimation(0f, +360f,
      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    animationSet.addAnimation(rotateAnimation);
    layout.setBackgroundColor(Color.GRAY);
    break;
   case 5:// 渐变尺寸伸缩和画面转移旋转动画效果
    ScaleAnimation scaleAnimation1 = new ScaleAnimation(0f, 1f, 0f, 1f,
      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    RotateAnimation rotateAnimation1 = new RotateAnimation(0f, +360f,
      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    animationSet.addAnimation(rotateAnimation1);
    animationSet.addAnimation(scaleAnimation1);
    layout.setBackgroundColor(Color.GREEN);
    break;
   case 6:// 渐变透明度和画面转移旋转动画效果(左右抽出)
    AlphaAnimation alphaAnimation1 = new AlphaAnimation(0.1f, 1.0f);
    TranslateAnimation translateAnimation1 = new TranslateAnimation(screenWidth, 0, 0,
      0);
    animationSet.addAnimation(translateAnimation1);
    animationSet.addAnimation(alphaAnimation1);
    layout.setBackgroundColor(Color.LTGRAY);
    break;
   case 7:// 渐变透明度和画面转移旋转动画效果(上下抽出)
    AlphaAnimation alphaAnimation2 = new AlphaAnimation(0.1f, 1.0f);
    TranslateAnimation translateAnimation3 = new TranslateAnimation(0, 0, screenHeight,
      0);
    animationSet.addAnimation(translateAnimation3);
    animationSet.addAnimation(alphaAnimation2);
    layout.setBackgroundColor(Color.RED);
    break;
   case 8:// 画面转换位置移动和画面转移旋转动画效果
    TranslateAnimation translateAnimation2 = new TranslateAnimation(screenWidth, 0,
      screenHeight, 0);
    RotateAnimation rotateAnimation2 = new RotateAnimation(0f, +360f,
      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    animationSet.addAnimation(rotateAnimation2);
    animationSet.addAnimation(translateAnimation2);
    layout.setBackgroundColor(Color.MAGENTA);
    break;
   case 9:// 渐变透明度和渐变尺寸伸缩动画效果
    ScaleAnimation scaleAnimation2 = new ScaleAnimation(0.95f, 1f, 0.95f, 1f,
      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    AlphaAnimation alphaAnimation3 = new AlphaAnimation(0.0f, 1.0f);
    animationSet.addAnimation(alphaAnimation3);
    animationSet.addAnimation(scaleAnimation2);
    layout.setBackgroundColor(Color.WHITE);
    break;
   default:
    break;
  }
  animationSet.setDuration(500);
  layout.startAnimation(animationSet);
  layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
    LayoutParams.MATCH_PARENT));
  Button back = new Button(this);
  back.setId(0);
  back.setText("返回");
  back.setOnClickListener(listener);
  layout.addView(back, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
  return layout;
 }

一个tween动画将对视图对象中的内容进行一系列简单的转换(位置,大小,旋转,透明性)。如果你有一个文本视图对象,你可以移动它,旋转它,让它变大或让它变小,如果文字下面还有背景图像,背景图像也会随着文件进行转换。

使用XML来定义Tween Animation

动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以使同时的。例如,你让文本内容从左边移动到右边,然后旋转180度,或者在移动的过程中同时旋转,没个转换需要设置一些特殊的参数(开始和结束的大小尺寸的大小变化,开始和结束的旋转角度等等,也可以设置些基本的参数(例如,开始时间与周期),如果让几个转换同时发生,可以给它们设置相同的开始时间,如果按序列的话,计算开始时间加上其周期。

二、Frame动画

顺序播放事先做好的图像,是一种画面转换动画。

Frame Animation可以在XML Resource定义(还是存放到res\anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画:当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:

XML属性说明

drawable 当前帧引用的drawable资源
duration 当前帧显示的时间(毫秒为单位)
oneshot 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
visible 规定drawable的初始可见性,默认为flase;

转载于:https://www.cnblogs.com/crazywenza/archive/2012/11/24/2785680.html

android中的四种基本动画相关推荐

  1. 后台CS代码中创建四种常用的SL动画效果

    http://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html后台CS代码中创建四种常用的动画效果[附带源码实例] 转载于: ...

  2. Android中的13种Drawable小结

    本节引言: 从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种 ...

  3. android java 多线程,Android多线程的四种方式

    当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在 ...

  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  5. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  6. Android数据的四种存储方式

    很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...

  7. [转][Android]Android数据的四种存储方式

    android.database.sqlite 类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBui ...

  8. php 数组存入mysql_PHP将数组存入数据库中的四种方式

    1.implode()和explode()方式 2.print_r()和自定义函数方式 3.serialize()和unserialize()方式 4.json_encode()和json_decod ...

  9. java object 引用类型_java中的四种引用类型

    java中的四种引用类型 一.强引用 强引用是最常见的,把一个对象赋给一个引用变量,这个引用变量就是一个强引用.当一个对象被强引用变量引用时,他处于可达状态,它是不会被GC回收的,即使该对象以后永远不 ...

  10. 计算机网络中的时延有哪几部分,计算机网络中的四种延迟分别是什么?

    计算机网络中的四种延迟分别是:节点处理延迟 .排队延迟.发送延迟.传播延迟. 1.节点处理延迟 数据更改在一个服务器上完成与该更改出现在另一个服务器上之间所用的时间(例如在发布服务器上进行更改和该更改 ...

最新文章

  1. Design Pattern in Java[Challenge 2.1]
  2. 接口应用练习题(用接口的方式实现某网上商城的网上支付功能)
  3. (12)MSP430F5529 常用内置函数和一些说明
  4. jenkins搭建_如何搭建移动端自动化测试平台?没错,就用Jenkins!
  5. PostgreSQL学习总结(1)—— PostgreSQL 入门简介与安装
  6. 从数学到SQL Server,对集合论的快速介绍
  7. 关于《构建之法》阅读笔记 的致歉博客
  8. 自由幻想java_新手学习Java之面对对象-----继承
  9. 易我电脑迁移 2022
  10. idea添加xsd文件
  11. 如何在你朋友面前伪装黑客6(程序代码)
  12. linux常用的英文单词收集
  13. css td 强制换行,css表格强制换行
  14. OpenStreetMap + Leaflet 当前位置定位
  15. 物联网案例(三):工业物联网中故障预警与风险管理的规范性分析
  16. 【office2010】利用尾注添加参考文献
  17. GAN GAN Inversion
  18. 次表面散射(Subsurface Scattering)(转)
  19. 云之讯官方测试Demo音频版源码阅读(编辑)
  20. 薅羊毛: 微信小程序开发者可以免费使用验证码短信服务了!

热门文章

  1. 上传本地项目到gitee_使用git将本地代码上传到gitee远程仓库
  2. python基础之centos7源码安装python3
  3. 线性表的顺序存储C++代码实现
  4. Shiro:初识Shiro及简单尝试
  5. 序列不包含任何匹配元素
  6. Win7 maven安装及配置
  7. woff字体找不到导致的404错误
  8. Android学习Matrix对称变换5
  9. node-webkit中使用sqlite3(MAC平台)
  10. 软件架构师的修炼之道