安卓动画入门教程 Animation in Android

概述

安卓有强大的动画,不管是view的动画,还是Activity切换的动画。安卓有三种动画系统,但最重要的就是属性动画(property animations)。属性动画允许我们去给任何的对象的属性增加动画。

这个属性动画可以应用到安卓应用的任何东西。一个典型的用法就是给view动态的运动,比如说位置的高棉,旋转,扩展大小或者颜色变化。

安卓中的动画和一些资源很像,都可以定义在xml文件或者java代码

动画的类型

事实上在安卓有两大不同的动画框架:

  • Property Animations (属性动画):在Android 3.0引入的最强大和灵活的动画系统。
  • View Animations :稍微慢一点和不是那么订货,自从Property Animations 引入后被废弃了

在这量大动画框架之下,又有5中相关的动画类型:

  • Property Animations 一个有两个值的动画,经常在对view使用动画的时候引入,比如说旋转一个图片或者淡出一个button。
  • Activity Transitions 这是一个过度的动画,比如说Activity进入屏幕
  • Fragment Transitions fragment进入或者退出屏幕产生的动画
  • Layout Animation 允许我们给任何的layout container或者viewgroup增加动画,比如说ListView、只要layout加上了动画,layout里面的元素也会被加上元素
    • Drawable Animations 可以显示drawable的时候显示动画

Property Animations

Property Animations是安卓3.0的引入的新特性。
给view动画的主要属性有

alpha:渐入或渐出
rotation, rotationX, rotationY;旋转或者反转
scaleX, scaleY:放大或者缩小
x,y,z:位置
translationX, translationY, translationZ (API 21+):位置改变

过去,在适配3.0之前的设备要使用NineOldAndroids 。但是NineOldAndroids 现在被废弃了再也不支持了,但你还是可以在build.gradle加上依赖

compile 'com.nineoldandroids:library:2.4.0'

AndroidViewAnimations 这个库可以支持老设备,有需求的朋友可以看看。

干货来啦!!!



使用ObjectAnimator

我们可以使用 ObjectAnimator方法去给一个指定的对象加上何时的属性,然后执行简单的动画

ObjectAnimator fadeAnim = ObjectAnimator.ofFloat(tvLabel, "alpha", 0.2f);
fadeAnim.start();

上面的代码是button渐出。注意到alpha是一个字符串类型,ObjectAnimator 是依赖于反射,使用button的getAlpha和set Alpha来显示动画

我们也可以使用property system去执行动画,

ObjectAnimator fadeAltAnim = ObjectAnimator.ofFloat(image, View.ALPHA, 0, 1);
fadeAltAnim.start();

这个应该是更快一点,因为运行中的反射会慢一点,属性支持 ALPHA, ROTATION, ROTATION_X, ROTATION_Y, SCALE_X, SCALE_Y, TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, X, Y, Z。

设置重复和周期

下面的代码渐出20%。我们可以加上周期或者重复

ObjectAnimator scaleAnim = ObjectAnimator.ofFloat(tvLabel, "scaleX", 1.0f, 2.0f);
scaleAnim.setDuration(3000);
scaleAnim.setRepeatCount(ValueAnimator.INFINITE);
scaleAnim.setRepeatMode(ValueAnimator.REVERSE);
scaleAnim.start();

设置插补

不管什么时候我们定义一个属性动画,我么 都要考虑动画变化的速率。换句话说,我们不仅仅要变,还要考虑怎么变,往那边。下面是指定了一个 TimeInterpolator

ObjectAnimator moveAnim = ObjectAnimator.ofFloat(v, "Y", 1000);
moveAnim.setDuration(2000);
moveAnim.setInterpolator(new BounceInterpolator());
moveAnim.start();

一些常用的插补器
AccelerateInterpolator:慢慢的出现然后加速
BounceInterpolator:弹回
DecelerateInterpolator:快速出现然后减速
LinearInterpolator:匀速的

还有一些其他的插补器可以供你参考

监听动画的生命周期

你可以加上 AnimatorListenerAdapter去管理动画周期的时间,比如说onAnimationStart 或者onAnimationEnd

ObjectAnimator anim = ObjectAnimator.ofFloat(v, "alpha", 0.2f);
anim.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {Toast.makeText(MainActivity.this, "End!", Toast.LENGTH_SHORT).show();}
});
anim.start();

多个动画

我们可以给ObjectAnimator 对象加上多个动画共同执行

AnimatorSet set = new AnimatorSet();
set.playTogether(ObjectAnimator.ofFloat(tvLabel, "scaleX", 1.0f, 2.0f).setDuration(2000),ObjectAnimator.ofFloat(tvLabel, "scaleY", 1.0f, 2.0f).setDuration(2000),ObjectAnimator.ofObject(tvLabel, "backgroundColor", new ArgbEvaluator(),/*Red*/0xFFFF8080, /*Blue*/0xFF8080FF).setDuration(2000)
);
set.start(); 

下面还有一些animator sets

// Define first set of animations
ObjectAnimator anim1 = ObjectAnimator.ofFloat(tvLabel, "scaleX", 2.0f);
ObjectAnimator anim2 = ObjectAnimator.ofFloat(tvLabel, "scaleY", 2.0f);
AnimatorSet set1 = new AnimatorSet();
set1.playTogether(anim1, anim2);
// Define second set of animations
ObjectAnimator anim3 = ObjectAnimator.ofFloat(v, "X", 300);
ObjectAnimator anim4 = ObjectAnimator.ofFloat(v, "Y", 300);
AnimatorSet set2 = new AnimatorSet();
set2.playTogether(anim3, anim4);
// Play the animation sets one after another
AnimatorSet set3 = new AnimatorSet();
set3.playSequentially(set1, set2);
set3.start();
// Create two animations to play together
ObjectAnimator bounceAnim = ...;
ObjectAnimator squashAnim = ...;
// Construct set 1 playing together
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).with(squashAnim);
// Create second animation to play after
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat(view1, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
// Play bouncer before fade
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();

安卓动画入门教程 Animation in Android(1)相关推荐

  1. 安卓动画入门_网络动画入门

    安卓动画入门 无论您是刚刚开始使用基础知识还是想探索更高级的技术,我们已经构建了完整的指南来帮助您学习CSS和为CSS 设置动画 . 网络动画入门 近年来,Motion已成为Web设计领域中非常重要的 ...

  2. 安卓开发入门教程-UI控件_EditText

    什么是EditText EditText是用于进行文本输入的UI控件. 基础样例 1.普通输入 效果图 代码 <EditTextandroid:layout_width="wrap_c ...

  3. Android基础入门教程——7.4 Android调用WebService

    Android基础入门教程--7.4 Android调用WebService 标签(空格分隔): Android基础入门教程 本节引言: 经过前面的学习,数据请求,数据解析,文件上传下载等,应该满足大 ...

  4. Android 安卓开发入门教程,

    Android开发使用控件入门 V6.0版 一.环境搭建: 1. 下载Android SDK (1) http://developer.android.com/sdk/index.html,该网址访问 ...

  5. 安卓开发入门教程-安装开发工具(Android Studio)

    本文简介 搭建Android Studio安卓开发环境. 目标用户 安卓初学者 操作步骤 一.下载Android Studio 下载迅雷加速下载(网速快的,直接略过本步骤).预计耗时:1分钟 在浏览器 ...

  6. android studio 安卓制作app入门教程,Android开发:AndroidStudio安卓APP入门教程

    轻松学会Android,让工作主动找你 即使你是零基础,也能掌握真正的技术 低风险.低投入,随时随地学习 全方位的技术支持:高清视频.源码.资料.技术指导 课程目录 章节1:初识篇 课时1开发环境搭建 ...

  7. android 获取控件高度_安卓开发入门教程UI控件_ImageView

    什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...

  8. android 获取控件高度_安卓开发入门教程UI控件_ProgressBar

    什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...

  9. 安卓开发入门教程!Android高级工程师必看系列,赶紧收藏!

    前言 Android开发前几年火爆一时,市场饱和后Android程序员每一名程序员都想成为架构师,但这期间,需要付出的辛苦和努力远超过我们的想象. 我对Android工程师的调研发现:97% 的And ...

  10. android ui组件开发教程,安卓开发入门教程-UI控件_Switch

    什么是Switch Switch是一种用于显示开关状态的UI控件. 基础样例 1.普通开关 效果图 代码 android:layout_width="wrap_content" a ...

最新文章

  1. 项目中非常有用并且常见的ES6语法
  2. 多快好省的宏基因组研究技巧 — 资深专家分享
  3. 发布html页面图像不显示不出来,图像不显示htmlimg/
  4. Linux系统基础优化
  5. linux命令详解:md5sum命令
  6. linux shell数组动态在for中追加元素及其遍历
  7. C++学习基础七——深复制与浅复制
  8. phpexcel导出大量数据合并单元格_php 数据导出到excel 2种带有合并单元格的导出...
  9. 将应用程序集成为Heroku附加组件
  10. git管理复杂项目代码
  11. 怎样利用商业智能软件实现业务目标
  12. 写在2012的最后一天
  13. particle filtering---粒子滤波(讲的很通俗易懂)
  14. BMC bioinformatics research
  15. JTAG接口简要介绍
  16. 自动驾驶常用传感器介绍
  17. 新疆计算机操作题,新疆维吾尔自治区教师计算机操作题复习套
  18. 高鹏清华计算机系,中国最顶尖的学霸到底有多厉害?看完,膝盖已跪碎!
  19. vscode自定义消息配置
  20. 当新三板公司踏入币圈 |链捕手

热门文章

  1. Apache ShenYu源码阅读系列-基于WebSocket的数据同步
  2. 相机靶面尺寸详解+工业相机选型
  3. C#导出数据—使用Word模板
  4. win10设置右键菜单打开cmd
  5. matlab函数表达式里分号_matlab中分号、冒号、逗号等常用标点符号的功能和用法总结...
  6. Web3.0时代:你在网上创造的一切,真的可以全部归你?
  7. 电子计算机一直在响,电脑硬盘一直响个不停怎么解决
  8. SpringMvc通过ajax完成上传到oss上
  9. 删除页眉页脚中横线的方法
  10. 华为交换机基于IP地址划分VLAN配置实验