1.安卓动画分为两种:Tween动画和Frame动画
Tween动画可以实现对View的内容移动、缩放、旋转以及渐变等效果
Frame动画则提供了一种逐帧播放图片的动画方式。
2.Tween动画文件保存在res/anim/目录下,与之关联的是R.anim
Frame动画文件保存在res/drawable目录下,与之关联的是R.drawable
3.Tween动画
渐变动画 <alpha> AlphaAnimation
缩放动画 <scale> ScaleAnimation
移动动画 <translate> TranslateAnimation
旋转动画 <rotate> RotateAnimation
1) 渐变动画
定义动画文件:alpha.xml
步骤:新建Android XML File --> Resource Type选择Tween Animation,Root Element选择alpha,填写文件名alpha,完成。
上面动画文件定义了3秒内内容由完全展示到消失
编写代码:MainActivity 主要有两步:加载动画 --- 执行动画
2) 缩放动画
动画文件:scale.xml
上面动画文件定义了3秒内以中心点为中心,x轴扩大1倍,y轴扩大2倍。
上面动画文件定义了3秒内x轴移动父窗体的50%,y轴移动自身的50%。
上面动画文件定义了3秒内以中心点为中心,旋转90度。
6) 使用代码编写动画
可以直接使用代码生成动画,使用的对应类见3。
7) 动画组合使用 --- <set>
多种动画可以组合使用,它们用<set>包裹起来。
上面是安卓文档提供的组合动画
抖动周期:/res/anim/cycle_7.xml
布局文件:
代码:
Frame动画是将很多图片逐帧播放。
核心类:AnimationDrawable
步骤:
1) 将需要切换的所有图片放到drawable对应分辨率的目录下。
2) 在/res目录下创建动画资源:
新建Android XML File --> Resource Type选择Drawable,Root Element选择animation-list,填写文件名frame,完成。
这时在res目录下自动生成drawable文件夹目录,目录下有frame.xml文件
3) 完成frame.xml
4) 给ImageView设置背景资源
帧动画是背景资源,所有要给ImageView设置背景,有两种方法
在布局文件xml中<ImageView>设置属性android:background="@drawable/frame"
或者在代码中:iv.setBackgroundResource(R.drawable.frame);
5) 在代码中添加动画 --- 核心
Tween动画可以实现对View的内容移动、缩放、旋转以及渐变等效果
Frame动画则提供了一种逐帧播放图片的动画方式。
2.Tween动画文件保存在res/anim/目录下,与之关联的是R.anim
Frame动画文件保存在res/drawable目录下,与之关联的是R.drawable
3.Tween动画
渐变动画 <alpha> AlphaAnimation
缩放动画 <scale> ScaleAnimation
移动动画 <translate> TranslateAnimation
旋转动画 <rotate> RotateAnimation
1) 渐变动画
定义动画文件:alpha.xml
步骤:新建Android XML File --> Resource Type选择Tween Animation,Root Element选择alpha,填写文件名alpha,完成。
这时在res目录下自动生成anim文件夹目录,目录下有alpha.xml文件
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromAlpha="1"
android:toAlpha="0" >
</alpha>
上面动画文件定义了3秒内内容由完全展示到消失
编写代码:MainActivity 主要有两步:加载动画 --- 执行动画
// 1.加载动画
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);
// 设置动画保持执行后效果
animation.setFillAfter(true);
// 2.控件执行动画
iv.startAnimation(animation);
2) 缩放动画
动画文件:scale.xml
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="2"
android:toYScale="4" >
</scale>
上面动画文件定义了3秒内以中心点为中心,x轴扩大1倍,y轴扩大2倍。
3) 移动动画
android:fromXDelta
android:fromYDelta
android:toXDelta
android:toYDelta
这四个属性控制移动的位置,它们的值有3种情况:
float数值:5 代表移动5px
x%:代表移动自身的x%
x%p:代表移动父窗体的x%
动画文件:translate.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="50%p"
android:toYDelta="50%" >
</translate>
上面动画文件定义了3秒内x轴移动父窗体的50%,y轴移动自身的50%。
4) 旋转动画
动画文件:rotate.xml
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="90" >
</rotate>
上面动画文件定义了3秒内以中心点为中心,旋转90度。
5) 动画插入器
可以给动画添加属性:android:interpolator,即动画插入器。
安卓提供了很多动画插入器,例如:android:interpolator="@android:anim/accelerate_interpolator" 是加速插入器
一般用到的有:加速 减速 先加速后减速 先减速后加速 周期
例:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="90" >
</rotate>
6) 使用代码编写动画
可以直接使用代码生成动画,使用的对应类见3。
// 1.加载动画
// 缩放动画
ScaleAnimation animation = new ScaleAnimation(0, 1, 0, 2);
animation.setDuration(3000);
// 设置动画保持执行后效果
animation.setFillAfter(true);
// 2.控件执行动画
iv.startAnimation(animation);
7) 动画组合使用 --- <set>
多种动画可以组合使用,它们用<set>包裹起来。
<set android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700" />
<set android:interpolator="@android:anim/decelerate_interpolator">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:duration="400"
android:fillBefore="false" />
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:duration="400" />
</set>
</set>
上面是安卓文档提供的组合动画
8) 输入框抖动
动画shake.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXDelta="0"
android:interpolator="@anim/cycle_7"
android:toXDelta="10" />
抖动周期:/res/anim/cycle_7.xml
<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:cycles="7" />
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="shake"
android:text="抖动" />
</LinearLayout>
代码:
public void shake(View v) {
// 1.加载动画
Animation animation = AnimationUtils.loadAnimation(this, R.anim.shake);
// 2.执行动画
et.startAnimation(animation);
}
Frame动画是将很多图片逐帧播放。
核心类:AnimationDrawable
步骤:
1) 将需要切换的所有图片放到drawable对应分辨率的目录下。
2) 在/res目录下创建动画资源:
新建Android XML File --> Resource Type选择Drawable,Root Element选择animation-list,填写文件名frame,完成。
这时在res目录下自动生成drawable文件夹目录,目录下有frame.xml文件
3) 完成frame.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/a1"
android:duration="1000"/>
....
</animation-list>
4) 给ImageView设置背景资源
帧动画是背景资源,所有要给ImageView设置背景,有两种方法
在布局文件xml中<ImageView>设置属性android:background="@drawable/frame"
或者在代码中:iv.setBackgroundResource(R.drawable.frame);
5) 在代码中添加动画 --- 核心
//得到动画
AnimationDrawable animationDrawable = (AnimationDrawable) iv.getBackground();
//开始动画
animationDrawable.start();
//停止动画
animationDrawable.stop();