学习并整理了下Android动画相关知识,掌握思想,摆脱遇到需求到处百度的场景。
目录
1、动画分类
View动画(本文重点)
帧动画(容易报OOM)
属性动画(API 11以上支持),以下可使用 NineOldAndroids开源动画库
2、View动画的种类
View动画分为四类,平移+缩放+旋转+透明度,XML文件标签和Java代码类对应关系如下:
平移: <translate> TranslateAnimation.java
缩放: <scale> ScaleAnimation.java
旋转: <rotate> RotateAnimation.java
透明度: <alpha> AlphaAnimation.java
说明:四个Java文件的位置位于android.view.animation下,这与后面的属性动画(相关类位于android.animation下)注意区分!
3、View动画的属性介绍
公共属性可以划分三大类:第一类:from-to;第二类:pivot轴心;第三类:其他,如持续时间,是否重复,重复样式。
第一类:from-to。以平移为例,X轴的的两个属性为
android:fromXDelta="int"
android:toXDelta="int"
第二类:pivot轴心。缩放和旋转有轴心。两样分X轴和Y轴:
android:pivotX="100%"
android:pivotY="50%"
注:当我第一次写成1和0.5时,轴心不是中间。必须是加了百分号的,否则,它理解为px值作为轴心。
第三类:其他。可查看API文档
android:repeatCount="-1" //-1表示无限次,0为默认值,>0则表示具体次数
android:repeatMode="reverse" //两个取值:reverse和restart
android:duration="1000" //一次动画经历(持续)的时间
4、View动画应用(实战)
Java测试代码。
//mainActivity.java
img1 = findViewById(R.id.img1);
img2 = findViewById(R.id.img2);
img3 = findViewById(R.id.img3);
img4 = findViewById(R.id.img4);
btn = findViewById(R.id.toActivityBtn);
Animation translateAnim = AnimationUtils.loadAnimation(this,R.anim.translate_animation);
translateAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
img1.startAnimation(translateAnim);
Animation scaleAnim = AnimationUtils.loadAnimation(this,R.anim.scale_anim);
img2.startAnimation(scaleAnim);
Animation rotateAnim = AnimationUtils.loadAnimation(this,R.anim.rotate_anim);
img3.startAnimation(rotateAnim);
Animation alphaAnim = AnimationUtils.loadAnimation(this,R.anim.alpha_anim);
img4.startAnimation(alphaAnim);
上述代码块掌握三个知识点即可:
第一,使用AnimationUtils.loadAnimation加载XML获取动画类。
第二,View对象使用.starAnimation开启动画。
第三,Animation可以设置动画监听,内有三个状态函数。
动画XML文件定义:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true"
android:ordering="together">
<translate
android:fromXDelta="-120"
android:fromYDelta="0"
android:toXDelta="120"
android:toYDelta="0"
android:duration="1000"
android:repeatCount="-1"
android:repeatMode="reverse"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="0.6"
android:fromYScale="1"
android:toXScale="1.2"
android:toYScale="1"
android:pivotX="100%"
android:pivotY="50%"
android:repeatCount="-1"
android:repeatMode="reverse"
android:duration="1000"/>
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="30"
android:pivotX="50%"
android:pivotY="50%"
android:duration="500"
android:repeatCount="-1"
android:repeatMode="reverse"
/>
<?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="500"
android:repeatCount="-1"
android:repeatMode="reverse"
/>
5、小结
本篇内容结束,介绍总结了下基础View动画的四类,下篇整理有关自定义View动画(3D)和帧动画的内容。
学习资料参考:《Android开发艺术探索》+API文档