当前位置: 编程技术>移动开发
Android 使用XML做动画UI的深入解析
来源: 互联网 发布时间:2014-10-20
本文导语: 效果: http://www.56.com/u82/v_OTM4MDk5MTk.html第一步: 创建anim文件夹放置动画xml文件在res文件夹下,创建一个anim的子文件夹。 第二步: 加载动画接着在Activity创建一个Animation类,然后使用AnimationUtils类加载动画xml 代码如下:Ani...
效果: http://www.56.com/u82/v_OTM4MDk5MTk.html
第一步: 创建anim文件夹放置动画xml文件
在res文件夹下,创建一个anim的子文件夹。
第二步: 加载动画
接着在Activity创建一个Animation类,然后使用AnimationUtils类加载动画xml
代码如下:
Animation animFadein;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fadein);
txtMessage = (TextView) findViewById(R.id.txtMessage);
btnStart = (Button) findViewById(R.id.btnStart);
// 加载动画
animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_in);
}
第三步: 设置动画监听器
如果你要监听动画的事件,如开始,结束等,你需要实现AnimationListener监听器,重写以下方法。
onAnimationEnd(Animation animation) - 当动画结束时调用
onAnimationRepeat(Animation animation) - 当动画重复时调用
onAniamtionStart(Animation animation) - 当动画启动时调用
代码如下:
@Override
public void onAnimationEnd(Animation animation) {
// 在动画结束后使用
// check for fade in animation
if (animation == animFadein) {
Toast.makeText(getApplicationContext(), "Animation Stopped",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAnimationRepeat(Animation animation) {
//当动画重复时使用
}
@Override
public void onAnimationStart(Animation animation) {
//当动画开始使用
}
最后一步: 让动画动起来啦。可以使用任何UI元素调用startAnimation方法。
以下是一个Textview元素调用的。
txtMessage.startAnimation(animFadein);
完整代码:
代码如下:
FadeInActivity(淡入动画)
?package com.chaowen.androidanimations;
import info.androidhive.androidanimations.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Animation.AnimationListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
/**
*
* @author chaowen
*
*/
public class FadeInActivity extends Activity implements AnimationListener {
TextView txtMessage;
Button btnStart;
Animation animFadein;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fadein);
txtMessage = (TextView) findViewById(R.id.txtMessage);
btnStart = (Button) findViewById(R.id.btnStart);
// 加载动画
animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_in);
// 设置监听
animFadein.setAnimationListener(this);
// 按钮
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtMessage.setVisibility(View.VISIBLE);
// 开始动画
txtMessage.startAnimation(animFadein);
}
});
}
@Override
public void onAnimationEnd(Animation animation) {
// 在动画结束后使用
// check for fade in animation
if (animation == animFadein) {
Toast.makeText(getApplicationContext(), "Animation Stopped",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAnimationRepeat(Animation animation) {
//当动画重复时使用
}
@Override
public void onAnimationStart(Animation animation) {
//当动画开始使用
}
}
一些重要的XML属性
重要的XML动画属性
android:duration 动画持续时间,时间以毫秒为单位
android:startOffset 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
android:interpolator 指定一个动画的插入器
android:fillAfter 当设置为true ,该动画转化在动画结束后被应用
android:repeatMode 定义重复的行为
android:repeatCount 动画的重复次数
以下是一些基本的动画XML.
Fade In: 淡入
alpha是渐变透明度效果,值由0到1
fade_in.xml
代码如下:
Fade Out : 淡出
以Fade In刚好相反,值由1到0.
fade_out.xml
代码如下:
Cross Fading: 交叉的淡入和淡出
同时使用Fade in和Fade out可以达到交叉的效果
代码如下:
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: 缩小
zoom_out.xml
代码如下:
Rotate: 旋转
rotate.xml
代码如下:
还有几个就不再列出,有兴趣下源码看。点击下载