前言: 关于Android中的动画吧,从我一开始接触Android的时候,就陆陆续续的接触过,不得不说,动画在Android应用中应用的还是很多的,熟悉掌握了动画,也可以装装B,做出各种吊炸的效果,好吧,有的时候你觉得自己会的东西但是真正做起来的时候有感觉很吃力,这就说明你根本就没有真正的了解它,写这系列的博客也是为了复习一下Android动画,巩固一下自己所学的知识,还是一样,大牛勿喷O(∩_∩)O~
我们会从先从很基础的内容开始,然后慢慢到一些复杂的动画,一起加油吧,骚年!!
Android中的动画分为:补间动画(平移、旋转、缩放、透明度)、帧动画、属性动画。
名称 | 含义 |
---|---|
补间动画 | 补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的。补间动画的优点是可以节省空间。 |
帧动画 | 通过播放一系列的图片从而产生动画效果,可以简单的理解为图片的切换动画,很显然,如果图片多或者很大的话,就会导致OOM。 |
属性动画 | 属性动画是API11以后才有的一个动画,(当然,我们后面也会用一个第三方的库来兼容低版本)通过不断的修改view的属性,从而达到动画的效果。 |
我们这节先来关注一下补间动画:
补间动画分为:透明度、平移、旋转、缩放。
名称 | xml中标签 | 对应的java类 | 表现形式 |
---|---|---|---|
透明度 | alpha | AlphaAnimatino | 改变view的透明度 |
平移 | translate | TranslateAnimation | 平移view |
旋转 | rotate | RotateAnimation | 旋转view |
缩放 | scale | ScaleAnimation | 缩放view |
补充一下:
在adt和as中,我们补间动画的存放位置是res/anim中:
从Animation类继承的属性
Animation类是所有动画(scale、alpha、translate、rotate)的基类。
Animation中公用的属性有:
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如物理中的需要做什么运动(匀速直线运动、曲线运动),后面会单独讲的。
- startOffset 延时多少时间后开始执行动画。
一、透明度Scale
如果你的工程中没有anim文件夹的话,自己创建一个哦,或者用as自动生成(在res目录中右键–>Android resource File):
ScaleAnimation中有两个重要的属性:
- android:fromAlpha 动画开始的透明度,从0.0 –1.0 ,0.0表示全透明,1.0表示完全不透明
- android:toAlpha 动画结束时的透明度,也是从0.0 –1.0 ,0.0表示全透明,1.0表示完全不透明
1、我们利用xml创建一个Scale动画:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0"
android:toAlpha="1"
android:duration="800"
android:repeatCount="-1"
android:repeatMode="reverse"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
/>
2、加载xml动画:
AlphaAnimation alpha= (AlphaAnimation) AnimationUtils.loadAnimation(this,R.anim.anim_alpha1);
3、播放ScaleAnimation动画:
tv_anim.startAnimation(alpha);
4、代码很简单,实现的效果是(透明度从0到1不断的循环)我们看一下效果:
效果是看到了,接着我们用代码实现一下:
1、AlphaAnimation 的构造方法:
- AlphaAnimation(Context context, AttributeSet attrs) 从本地XML加载动画,基本不用
- AlphaAnimation(float fromAlpha, float toAlpha)
/**
* 透明度动画测试
* <?xml version="1.0" encoding="utf-8"?>
* <alpha xmlns:android="http://schemas.android.com/apk/res/android"
* android:fromAlpha="0"
* android:toAlpha="1"
* android:duration="800"
* android:repeatCount="