Android 动画分为两大类,分别是视图动画(View Animation)和属性动画(Property Animation)。对于这两种动画,都能够使用xml和代码的形式定义动画。
注:布局动画相关博客已经发布,有兴趣可跳转Android动画之布局动画
View Animation
视图动画是Android
最基础的动画,在API 1中就已经加入,不需考虑兼容性,但由于其动画只是作用于视图上,而不会由该控件的属性,所以有很多的局限性。
视图动画的基类是Animation
其下包含了四个直接的子类
AlphaAnimation
: 透明度动画TranslateAnimation
:平移动画ScaleAnimation
:缩放动画RotateAnimation
:旋转动画AnimationSet
:动画集合
Animation 公共常用方法
xml属性 | java 方法 | 解释 |
---|---|---|
android:duration | setDuration(long) | 设置动画执行的时间 |
android:fillAfter | setFillAfter(boolean) | 设置动画是否保持其结束时的状态,默认false,不保存 |
android:fillBefore | setFillBefore(boolean) | 设置动画结束时是否回到其动画初始之前的状态,默认为true。当设置为false时,需要fillEnabled属性为true |
android:fillEnabled | setFillEnable(boolean) | 当该属性设置为true时,fillBefore(false)属性才能生效。 |
android:interpolator | setInterpolator(Interpolator) | 设置插值器,及动画执行的变化的速率。及一直匀速,或前快后慢等 |
android:repeatCount | setRepeatCount(int) | 设置动画重复执行的次数,默认为0,及不重复执行 |
android:repeatMode | setRepeatMode(int) | 设置动画重复执行的模式,可取值REVERSE:重复执行时,按照倒序。RESTART:从头开始 |
android:startOffset | setStartOffset(long) | 设置动画延迟执行的时间 |
View Animation 通过xml文件构造动画时,其资源文件存放在 res-》anim。 这个需要我们手动创建anim文件夹。
我们将实现如下例子,用以学习View Animation
AlphaAnimation
- java代码定义动画
//初始透明度,结束时的透明度 取值范围1.0~0.0
AlphaAnimation anim= new AlphaAnimation(1,0);
//RepeatCount ,动画执行结束后的重复次数,如果大于0,则重复次数。默认是0
//如果小于0,默认是Animation.INFINITE
anim.setRepeatCount(1); //重复1次
//Animation.RESTART 从头开始。 Animation.REVERSE :反转
anim.setRepeatMode(Animation.REVERSE);
anim.setDuration(1000);
img.startAnimation(anim);
- xml定义动画
创建 res-》anim-》view_alpha.xml 文件。
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:repeatMode="reverse"
android:repeatCount="1"
android:fromAlpha="1"
android:toAlpha="0"
>
<!--
fromAlpha : 初始透明度
toAlpha: 目标透明度
-->
</alpha>
在java代码中通过AnimationUtils加载xml文件,构造动画对象。对于View Aniamtion
,都是通过该方法加载xml文件。
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_alpha);
img.startAnimation(animation);
RotateAnimation 旋转动画
- java 代码创建
RotateAnimation anim = new RotateAnimation(0f,180f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
anim.setDuration(500);
//设置为true ,则保持动画结束后的状态,默认false
anim.setFillAfter(true);
img.startAnimation(anim);
在RotateAnimation中最全参数的构造方法如下RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
参数解释如下:
fromDegrees
:起始的度数toDegrees
:结束时的度数pivotXType
和pivotYType
:旋转时参照的动画中心点的位置类型。可选值:RELATIVE_TO_SELF
依据自身为参照。RELATIVE_TO_PARENT
依据其所在的父控件为参照pivotXValue
和pivotYValue
:百分比值。与上面的参数配合使用。例如对于X轴来说,如果类型是RELATIVE_TO_SELF
,值是0.5f,则就是位于当前控件x轴的中心。xml创建动画
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "500"
android:fillAfter = "true"
android:fromDegrees="0"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%"
>
<!--
android:duration 动画从开始到结束持续的时长,单位为毫秒
android:fromDegrees 旋转开始的角度
android:toDegrees 旋转结束的角度
android:pivotX 旋转中心点的X坐标,纯数字表示相对于View本身左边缘的像素偏移量;
带"%"后缀时表示相对于View本身左边缘的百分比偏移量;带"%p"后缀时表示相对于父View左边缘的百分比偏移量
android:pivotY 旋转中心点的Y坐标,纯数字表示相对于View本身顶部边缘的像素偏移量;
带"%"后缀时表示相对于View本身顶部边缘的百分比偏移量;带"%p"后缀时表示相对于父View顶部边缘的百分比偏移量
-->
</