Andriod中有几种常用的Animation
AlphaAnimation 淡入淡出效果
RotateAnimation 旋转效果
ScaleAnimation 缩放动画
TranslaAnimation 移动动画
这几种动画可以通过xml实现也可以通过java代码实现,先看下在代码中是怎样实现了
在布局文件(animation.xml)中声明几个效果的按钮和图片
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/rotate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="rotate演示" />
<Button
android:id="@+id/scale"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="scale演示" />
<Button
android:id="@+id/translate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="translate演示" />
<Button
android:id="@+id/alpha"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="alpha演示" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dip"
android:src="@drawable/ic_launcher" />
</LinearLayout>
package com.example.animation;
import com.example.widgetdemo.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
public class AnimationDemo extends Activity {
private Button rotate = null;
private Button scale = null;
private Button translate = null;
private Button alpha = null;
private ImageView image = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.animation);
rotate = (Button) findViewById(R.id.rotate);
scale = (Button) findViewById(R.id.scale);
translate = (Button) findViewById(R.id.translate);
alpha = (Button) findViewById(R.id.alpha);
image = (ImageView) findViewById(R.id.image);
rotate.setOnClickListener(new rotateListener());
scale.setOnClickListener(new scaleListener());
translate.setOnClickListener(new translateListener());
alpha.setOnClickListener(new alphaListener());
}
/**
* 旋转动画
* @author Administrator
*
*/
class rotateListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet = new AnimationSet(true);
RotateAnimation totateAnimation = new RotateAnimation(0, //旋转开始角度
360, //旋转结束角度
Animation.RELATIVE_TO_SELF, //X轴的旋转类型有三种选择Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT
2f, //X轴的旋转值
Animation.RELATIVE_TO_SELF,
0f);
//动画持续时间
totateAnimation.setDuration(2000);
//添加动画效果
animationSet.addAnimation(totateAnimation);
//为图片添加动画
image.startAnimation(animationSet);
}
}
/**
* 缩放动画
* @author Administrator
*
*/
class scaleListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet = new AnimationSet(true);
ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1,
0.1f, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(2000);
animationSet.addAnimation(scaleAnimation);
image.startAnimation(animationSet);
}
}
/**
* 移动
* @author Administrator
*
*/
class translateListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet = new AnimationSet(true);
TranslateAnimation translateAnimation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 1.0f);
translateAnimation.setDuration(2000);
animationSet.addAnimation(translateAnimation);
image.startAnimation(animationSet);
}
}
/**
* 渐变动画 淡入淡出
* @author Administrator
*
*/
class alphaListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet = new AnimationSet(true);
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
alphaAnimation.setDuration(2000);
animationSet.setStartOffset(1000); // 1s后开始
animationSet.addAnimation(alphaAnimation);
image.startAnimation(animationSet);
}
}
}
难点主要是每个动画的构造函数如何设置参数。
第二种实现方法
下面再来看下如何在xml中设置动画
首先在res目录下创建anim目录动画效果的配置文件
alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<alpha
android:duration="3000"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:startOffset="500" />
</set>
rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<rotate
android:duration="3000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="+360" />
</set>
scale.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<scale
android:duration="3000"
android:fromXScale="1.0"
android:toXScale="0.0"
android:fromYScale="1.0"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
translate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="3000"
android:fromXDelta="50%"
android:toXDelta="100%"
android:fromYDelta="0%"
android:toYDelta="100%" />
</set>
再来看下在Activity中如何实现
package com.example.animation;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import com.example.widgetdemo.R;
public class AnimationXmlDemo extends Activity {
private Button rotate = null;
private Button scale = null;
private Button translate = null;
private Button alpha = null;
private ImageView image = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.animation_xml);
rotate = (Button) findViewById(R.id.rotate);
scale = (Button) findViewById(R.id.scale);
translate = (Button) findViewById(R.id.translate);
alpha = (Button) findViewById(R.id.alpha);
image = (ImageView) findViewById(R.id.image);
rotate.setOnClickListener(new rotateListener());
scale.setOnClickListener(new scaleListener());
translate.setOnClickListener(new translateListener());
alpha.setOnClickListener(new alphaListener());
}
/**
* 旋转动画
* @author Administrator
*
*/
class rotateListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Animation animation = AnimationUtils.loadAnimation(AnimationXmlDemo.this, R.anim.rotate);
image.startAnimation(animation);
}
}
/**
* 缩放动画
* @author Administrator
*
*/
class scaleListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Animation animation = AnimationUtils.loadAnimation(AnimationXmlDemo.this, R.anim.scale);
image.startAnimation(animation);
}
}
/**
* 移动
* @author Administrator
*
*/
class translateListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Animation animation = AnimationUtils.loadAnimation(AnimationXmlDemo.this, R.anim.translate);
image.startAnimation(animation);
}
}
/**
* 渐变动画
* @author Administrator
*
*/
class alphaListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Animation animation = AnimationUtils.loadAnimation(AnimationXmlDemo.this, R.anim.alpha);
image.startAnimation(animation);
}
}
}
在代码中和xml中实现的效果都是一样的,最后上图
完整的代码可以到以下链接下载