Android Animation介绍
Android Animation是Android提供的实现UI界面动画效果的API,Animation提供了一系列的动画效果。Android SDK提供了两种Animation:
- Tween Animation(渐变动画): 通过对特定的对象做图像变换如平移、缩放、旋转、淡出/淡入等产生动画效果
- Frame Animation(帧动画): 创建一个Drawable序列,这些Drawable可以按照指定的时间间隔一个一个的显示,也就是顺序播放事先做好的图像
Tween Animation(渐变动画):
- AlphaAnimation:渐变透明度动画效果
- RotateAnimation:旋转动画效果
- TranslateAnimation:移动动画效果
- ScaleAnimation:渐变尺寸伸缩动画效果
Frame Animation(帧动画):
- 在XML资源中定义Animation,使用AnimationUtils中的loadAnimation()函数加载动画
- 使用Animation子类的构造函数来初始化Animation对象
Android Animation使用
1.界面配置
activity_main.xml文件中配置:
<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.icarus.learnanimation.MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/anamationme"
android:id="@+id/btnAlphaAnimation" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/rotateanimation"
android:id="@+id/btnRotateAnimation"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/translateanimation"
android:id="@+id/btnTranslateAnimation"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/scaleanimation"
android:id="@+id/btnScaleAnimation"/>
</LinearLayout>
2.界面效果:
3.给按钮添加Animation动画效果
有两种方式给按钮添加动画效果,一种是直接在代码中编写相应的控制语句,另外一种是在xml资源文件中配置相应的动画属性,然后使用AnimationUtils中的loadAnimation()函数加载动画。
- 渐变透明度动画效果按钮功能实现(代码实现)
btnAlphaAnimation = (Button) findViewById(R.id.btnAlphaAnimation); btnAlphaAnimation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //使用代码方式配置按钮动画效果 AlphaAnimation aa=new AlphaAnimation(0,1);//透明度0到1之间的动画效果 aa.setDuration(1000);//设置动画时间长度 v.startAnimation(aa);//给按钮指明动画效果 } }); 2.渐变透明度动画效果按钮功能实现(资源文件实现) 在res中新建Resource File,主要配置信息如下: File name:aa Resource type:Animation Root element:alpha Source set:main Directory name:anim aa.xml中编写:
<?xml version="1.0" encoding="utf-8"?>
<!--用xml资源文件实现对按钮透明动画的配置-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0"
android:toAlpha="1"
android:duration="1000">
</alpha>
此时按钮点击事件中便可以使用资源文件来配置按钮点击动画:
btnAlphaAnimation = (Button) findViewById(R.id.btnAlphaAnimation);
btnAlphaAnimation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.aa));
}
});
这样透明效果按钮的Animation动画效果就添加完成。
4.其他按钮资源配置文件:
- 旋转效果按钮:
<?xml version="1.0" encoding="utf-8"?>
<!--使用xml配置文件实现按钮旋转效果-->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:duration="1000"
android:pivotX="50%"
android:pivotY="50%">
</rotate>
- 移动效果按钮:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="300%"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="1000">
</translate>
- 缩放效果按钮:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="0"
android:toXScale="1"
android:fromYScale="0"
android:toYScale="1"
android:duration="1000"
android:pivotX="50%"
android:pivotY="50%">
</scale>
完整java代码
package com.example.icarus.learnanimation;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
/**
* 给按钮实现动画效果
*/
public class MainActivity extends AppCompatActivity {
private Button btnAlphaAnimation;
private Button btnRotateAnimation;
private Button btnTranslateAnimation;
private Button btnScaleAnimation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAlphaAnimation = (Button) findViewById(R.id.btnAlphaAnimation);
btnAlphaAnimation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 使用代码方式配置按钮动画效果
// AlphaAnimation aa=new AlphaAnimation(0,1);//透明度0到1之间的动画效果
// aa.setDuration(1000);//设置动画时间长度
// v.startAnimation(aa);//给按钮指明动画效果
// 使用xml文件配置动画效果
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.aa));
}
});
btnRotateAnimation= (Button) findViewById(R.id.btnRotateAnimation);
btnRotateAnimation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//相对于自身中间点旋转
// 使用代码方式配置按钮动画效果
// RotateAnimation ra=new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
// ra.setDuration(1000);
// v.startAnimation(ra);
// 使用xml配置文件实现按钮旋转效果
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.ra));
}
});
btnTranslateAnimation= (Button) findViewById(R.id.btnTranslateAnimation);
btnTranslateAnimation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 使用代码方式配置按钮动画效果
// TranslateAnimation ts=new TranslateAnimation(0,600,0,0);
// TranslateAnimation ts=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,3f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f);
// ts.setDuration(1000);
// v.startAnimation(ts);
// 使用xml配置文件实现按钮旋转效果
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.ta));
}
});
btnScaleAnimation= (Button) findViewById(R.id.btnScaleAnimation);
btnScaleAnimation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 使用代码方式配置按钮动画效果
// ScaleAnimation sa=new ScaleAnimation(0,1,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
// sa.setDuration(1000);
// v.startAnimation(sa);
// 使用xml配置文件实现按钮旋转效果
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.sa));
}
});
}
}