Android系统提供了4种动画效果,分别是: AlphaAnimation(透明度动画效果 );RotateAnimation(旋转动画效果);ScaleAnimation(缩放动画效果 ); TranslateAnimation(位移动画效果 )我做了2个动画效果从单一个一个动画,到复合动画,有源代码可以下载。
第一个是一个简单位移动画:点击打开链接
第二个是旋转+透明动画:点击打开链接
AlphaAnimation(透明度动画效果 ) | RotateAnimation(旋转动画效果) | ScaleAnimation(缩放动画效果 ) | TranslateAnimation(位移动画效果 ) |
setDuration | 设置持续时间 |
startNow | 立刻启动动画 |
start | 启动动画 |
cancel | 取消动画 |
setRepeatCount | 设置重复次数 |
setFillEnabled | 使能填充效果 |
setFillBefore | 设置起始填充 |
setFillAfter | 设置终止填充 |
setRepeatMode | 设置重复模式 |
setStartOffset | 设置启动时间 |
一:TranslateAnimation类:位置变化动画
TranslateAnimation类是Android系统中的位置变化动画类,用于控制View对象的位置变化,该类继承于Animation类。TranslateAnimation类中的很多方法都与Animation类一致,该类中最常用的方法便是TranslateAnimation构造方法。
【基本语法】public TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
【参数说明】
fromXDelta:位置变化的起始点X坐标。
toXDelta:位置变化的结束点X坐标。
fromYDelta:位置变化的起始点Y坐标。
toYDelta:位置变化的结束点Y坐标。
二:RotateAnimation类:旋转变化动画类
RotateAnimation类是Android系统中的旋转变化动画类,用于控制View对象的旋转动作,该类继承于Animation类。RotateAnimation类中的很多方法都与Animation类一致,该类中最常用的方法便是RotateAnimation构造方法。
【基本语法】public RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
【参数说明】
fromDegrees:旋转的开始角度。
toDegrees:旋转的结束角度。
pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotXValue:X坐标的伸缩值。
pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotYValue:Y坐标的伸缩值。
三:ScaleAnimation类:尺寸变化动画
ScaleAnimation类是Android系统中的尺寸变化动画类,用于控制View对象的尺寸变化,该类继承于Animation类。ScaleAnimation类中的很多方法都与Animation类一致,该类中最常用的方法便是ScaleAnimation构造方法。
【基本语法】public ScaleAnimation (float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
【参数说明】
fromX:起始X坐标上的伸缩尺寸。
toX:结束X坐标上的伸缩尺寸。
fromY:起始Y坐标上的伸缩尺寸。
toY:结束Y坐标上的伸缩尺寸。
pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotXValue:X坐标的伸缩值。
pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotYValue:Y坐标的伸缩值。
四:AlphaAnimation类:透明度变化动画类
AlphaAnimation类是Android系统中的透明度变化动画类,用于控制View对象的透明度变化,该类继承于Animation类。AlphaAnimation类中的很多方法都与Animation类一致,该类中最常用的方法便是AlphaAnimation构造方法。
【基本语法】public AlphaAnimation (float fromAlpha, float toAlpha)
【参数说明】
fromAlpha:开始时刻的透明度,取值范围0~1。
toAlpha:结束时刻的透明度,取值范围0~1。
五:AnimationSet类:动画集合类
AnimationSet类是Android系统中的动画集合类,用于控制View对象进行多个动作的组合,该类继承于Animation类。AnimationSet类中的很多方法都与Animation类一致,该类中最常用的方法便是addAnimation方法,该方法用于为动画集合对象添加动画对象。
第一个是一个简单动画,只实现了TranslateAnimation(位移动画效果 ):
MainActivity.java中的代码:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) { //重载onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象
Button btn1=(Button)findViewById(R.id.button1); //按钮对象1(开始动画)
Button btn2=(Button)findViewById(R.id.button2); //按钮对象 2(停止动画)
final Animation translateAnimation=new TranslateAnimation(0,300,0,300);//移动动画效果
btn1.setOnClickListener(new View.OnClickListener() { //设置监听器
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
translateAnimation.setDuration(3000); //设置动画持续时间
image.setAnimation(translateAnimation); //设置动画效果
translateAnimation.startNow(); //启动动画
}
});
btn2.setOnClickListener(new View.OnClickListener() { //设置监听器
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
translateAnimation.cancel(); /
/取消动画执行
}
});
}
}
</pre><pre>
<pre name="code" class="java">activity_main.xml中的代码:
<RelativeLayout 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" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/kaishi" /> <Button android:id="@+id/button2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/button1" android:text="@string/dingzhi" /> <ImageView android:id="@+id/imageView1" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignLeft="@+id/button2" android:layout_below="@+id/button2" android:src="@drawable/splash" /> </RelativeLayout>
在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在第一个按钮监听器中,通过setDuration方法设置动画持续时间3333毫秒,并为image对象设置动画效果,最后使用startNow方法启动动画效果。在第二个按钮监听器中,调用cancel方法取消动画执行。读者执行这段代码,可以在手机屏幕上看到如图9.2所示的显示效果。当点击"执行动画"按钮时,图片开始移动;当点击"停止动画"按钮时,动画被取消,重新返回起始位置。
第一个动画运行结果如下图:
在做第二个动画之前要先学一下AnimationSet类(动画集合类):
AnimationSet类是Android系统中的动画集合类,用于控制View对象进行多个动作的组合,该类继承于Animation类。AnimationSet类中的很多方法都与Animation类一致,该类中最常用的方法便是addAnimation方法,该方法用于为动画集合对象添加动画对象。(可以和第一个对比一下,AnimationSet就是面向对象的。)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView image=(ImageView) findViewById(R.id.imageView1);//对象imageView1
Button btn1=(Button)findViewById(R.id.button1);//按钮对象(开始动画)
Button btn2=(Button)findViewById(R.id.button2);//按钮对象(停止动画)
final Animation rotateAnimation = new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//设置旋转
final Animation alphaAnimation= new AlphaAnimation(0.1f,1.0f);//设置透明
btn1.setOnClickListener(new View.OnClickListener() {//button1的监听
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
rotateAnimation.setDuration(10000);//旋转时间
alphaAnimation.setDuration(7000);//透明时间
AnimationSet set=new AnimationSet(true);//AnimationSet类,创建对象set
set.addAnimation(rotateAnimation);//给set对象添加旋转效果
set.addAnimation(alphaAnimation);//给set对象添加透明效果
image.setAnimation(set);//设置动画
set.startNow();//开始
}
});
btn2.setOnClickListener(new View.OnClickListener() { //button2的监听
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
set.cancel();// 停止
//
}
});
}
XML文件就不写了,和第一个一模一样。。