在Android应用程序,使用动画效果,能带给用户更好的感觉,做动画可以通过XML或Android代码来实现。
Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation (渐变动画),另一种是frame by frame animation (画面转换动画)。
tweened animation渐变动画有以下两种类型:
1.alpha 渐变透明度动画效果
2.scale 渐变尺寸伸缩动画效果
frame by frame animation 画面转换动画有以下两种类型:
1.translate 画面转换位置移动动画效果
2.rotate 画面转移旋转动画效果
在这里,我使用XML来做动画。实现基本的动画,如淡入,旋转等。
步骤:1、首先在res目录中新建anim的文件夹,在anim中新建需要的动画xml资源文件。
anim/alpha.xml(渐变动画)
anim/scale.xml(伸缩动画)
anim/translate.xml(移动动画)
anim/rotate.xml(旋转动画)
2、xml资源文件创建完成之后,接下来就是调用这些资源文件。以alpha为例,先创建AlphaActivity。
在activity_alpha.xml中随便放一张背景图片
AlphaActivity.java
package com.example.animation_demo;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Toast;
public class AlphaActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view=View.inflate(this, R.layout.activity_alpha, null);
setContentView(view);
//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
Animation animation=AnimationUtils.loadAnimation(this, R.anim.alpha);
view.startAnimation(animation);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {} //在动画开始时使用
@Override
public void onAnimationRepeat(Animation arg0) {} //在动画重复时使用
@Override
public void onAnimationEnd(Animation arg0) {
Toast.makeText(AlphaActivity.this, "在动画结束时使用", Toast.LENGTH_SHORT).show();
}
});
}
}
这个是整个layout文件的动画,也可以让任何UI元素调用starAnimation方法。
例如:textMsg.startAnimation(animation); 这时候就不需要下面代码 动画填充指定xml了
View view=View.inflate(this, R.layout.activity_alpha, null);
setContentView(view);
直接setContentView(R.layout.activity_alpha); 就OK了。卒。
附上找到的一些基本的xml效果:
Fade In:淡入
alpha是渐变透明度效果,值由0到1
fade_in.xml
Fade Out :淡出
fade_out.xml
Cross Fading: 交叉的淡入和淡出
public class CrossfadeActivity extends Activity implements AnimationListener {
TextView txtMessage1, txtMessage2;
Button btnStart;
Animation animFadeIn, animFadeOut;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crossfade);
txtMessage1 = (TextView) findViewById(R.id.txtMessage1);
txtMessage2 = (TextView) findViewById(R.id.txtMessage2);
btnStart = (Button) findViewById(R.id.btnStart);
// load animations
animFadeIn = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_in);
animFadeOut = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_out);
// set animation listeners
animFadeIn.setAnimationListener(this);
animFadeOut.setAnimationListener(this);
// button click event
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtMessage2.setVisibility(View.VISIBLE);
txtMessage2.startAnimation(animFadeIn);
txtMessage1.startAnimation(animFadeOut);
}
});
}
@Override
public void onAnimationEnd(Animation animation) {
if (animation == animFadeOut) {
txtMessage1.setVisibility(View.GONE);
}
if(animation == animFadeIn){
txtMessage2.setVisibility(View.VISIBLE);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
}
BLink:若隐若现
blink.xml
Zoom In:放大
zoom_in.xml
Zoom Out:缩小
Rotate:旋转
rotate.xml
好长啊。。。既然你们都看到这里了,再多说几句。。
根节点
名称 |
属性 |
备注 |
android:shareInterpolator |
是否共享插入器 |
共享时,四个子节点都用一个插入器 |
android:interpolator |
指定一个动画的插入器 |
使用系统资源 |
android:fillEnabled |
|
当设置为true时,fillAfter和fill, Befroe将会都为true,此时会忽略fillBefore 和fillAfter两种属性 |
android:fillAfter |
该动画转化是否在动画结束后被应用 |
boolean |
android:fillBefore |
该动画转化是否在动画开始前被应用 |
boolean |
android:repeatMode |
重复模式 |
"restart" 或者 "reverse" |
android:repeatCount |
重复次数 |
integer |
android:duration |
动画持续时间 |
integer |
android:startOffset |
动画时间间隔 |
long |
android:zAdjustment |
定义动画z order的变换 |
[normal] or [top] or [bottom] |
android:detachWallpaper |
|
boolean |
欢迎交流 http://blog.csdn.net/ycwol/article/details/41118831