手持终端
Eclipse平台下Android开发环境的搭建
PhoneGap配置到Eclipse开发环境
使用PhoneGap开发Android应用程序
PhoneGap3.0以上版本配置到Eclipse开发环境
使用PhoneGap3.0版本开发Android应用程序
PhoneGap3.0的第三方Android插件
Cordova配置到Android Studio开发环境
Android系统基本架构
Android的字符串颜色图片样式
Android的常用控件及菜单
Android的消息提示及传递
Android系统的组件通信
Android系统的Service
Android的广播消息接收
Android的数据存储与访问
Android系统的网络应用
Android图形图像处理
Android的Fragment框架
Android系统的并发编程
Java源文件结构与保留字
Java语言的数据类型与变量
Java的运算符与流程控制
Java语言的数组及操作
Java面向对象编程
Java的常用类
Android开发常用工具及命令
Android应用程序权限管理
Android系统提供的R类内置资源
Android系统的控件类及其方法
Android系统的菜单类及其方法
Android系统的对话框
Android应用程序模型及组件
Android的绘图类及方法
Android系统的动画效果
Android的数据库操作
Android的多媒体功能
Android系统照相机的使用
Android的文本朗读TTS
获取Android系统信息
Android系统的电话操作
Android系统的定位
Android系统的传感器
Android系统提供了两种实现动画的方式,一种是Tween Animation,另一种是Frame Animation。Tween Animation可以实现View组件的移动、放大、缩小及渐变等效果,Frame Animation则提供了一种逐帧播放图片的动画方式。Android系统为这两种动画进行了封装,提供了简单的应用接口。
1.Animation类:动画抽象类
Animation类是Android系统的一个动画抽象类,所有其他一些动画类都要继承该类中的实现方法。Animation类主要用于Tween Animation效果,提供了动画启动、停止、重复、持续时间等方法。
1)setDuration方法:设置持续时间
该方法用于设置动画的持续时间,以毫秒为单位。该方法是设置Tween Animation时间长度的主要方法。语法格式:
public void setDuration(long durationMillis)
其中,参数durationMillis为动画持续时间,单位是毫秒。
2)startNow方法:立刻启动动画
该方法用于启动执行一个动画。该方法是启动执行动画的主要方法,使用时需要先通过setAnimation方法为某一个View对象设置动画。也可以使用View组件的startAnimation方法来启动执行动画。语法格式:
public void startNow()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
final Animation translateAnimation=new TranslateAnimation(0,200,0,200);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.setDuration(3000);
image.setAnimation(translateAnimation);
translateAnimation.startNow();
}
});
}
}
3)start方法:启动动画
该方法用于启动执行一个动画。该方法是启动执行动画的另一个主要方法,使用时需要先通过setAnimation方法为某一个View对象设置动画。start方法可以用于在getTransformation方法被调用时启动动画。语法格式:
public void start()
4)cancel方法:取消动画
该方法用于取消一个动画的执行。该方法是取得一个正在执行中的动画的主要方法。cancel方法和startNow方法结合可以实现对动画执行过程的控制。通过cancel方法取消的动画,必须使用reset方法或者setAnimation方法重新设置,才可以再次执行动画。语法格式:
public void cancel()
5)setRepeatCount方法:设置重复次数
该方法用于设置一个动画效果重复执行的次数。Android系统默认每个动画仅执行一次,通过该方法可以设置动画执行多次。语法格式:
public void setRepeatCount(int repeatCount)
其中,参数repeatCount为重复执行的次数。如果设置为n,则动画将执行n+1次。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final Animation translateAnimation=new TranslateAnimation(0,200,0,200);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.setDuration(3000);
translateAnimation.setRepeatCount(2);
image.setAnimation(translateAnimation);
translateAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.cancel();
}
});
}
}
6)setFillEnabled方法:使能填充效果
该方法用于使能填充效果。当该方法设置为true时,将执行setFillBefore和setFillAfter方法,否则将忽略setFillBefore和setFillAfter方法。语法格式:
public void setFillEnabled(boolean fillEnabled)
其中,参数fillEnabled为是否使能填充效果,true表示使能该效果,false表示禁用该效果。
7)setFillBefore方法:设置起始填充
该方法用于设置一个动画效果执行完毕后,View对象返回到起始的位置。该方法的效果是系统默认的效果。该方法的执行,需要首先通过setFillEnabled方法使能填充效果,否则设置无效。语法格式:
public void setFillBefore(boolean fillBefore)
其中,参数fillBefore为是否执行起始填充效果,true表示使能该效果,false表示禁用该效果。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final Animation translateAnimation=new TranslateAnimation(0,200,0,200);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.setDuration(3000);
translateAnimation.setFillBefore(true);
translateAnimation.setFillEnabled(true);
image.setAnimation(translateAnimation);
translateAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.cancel();
}
});
}
}
8)setFillAfter方法:设置终止填充
该方法用于设置一个动画效果执行完毕后,View对象保留在终止位置。该方法的执行,需要首先通过setFillEnabled方法使能填充效果,否则设置无效。语法格式:
public void setFillAfter(boolean fillAfter)
其中,参数fillAfter为是否执行终止填充效果,true表示使能该效果,false表示禁用该效果。示例:
translateAnimation.setFillAfter(true);
9)setRepeatMode方法:设置重复模式
该方法用于设置一个动画效果执行的重复模式。Android系统提供了几种重复模式,其中最主要的便是RESTART模式和REVERSE模式。语法格式:
public void setRepeatMode(int repeatMode)
其中,参数repeatMode为动画效果的重复模式,常用的取值为:
·RESTART:重新从头开始执行
·REVERSE:反方向执行
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final Animation translateAnimation=new TranslateAnimation(0,200,0,200);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.setDuration(3000);
translateAnimation.setRepeatCount(2);
translateAnimation.setRepeatMode(Animation.RESTART);
translateAnimation.setRepeatMode(Animation.REVERSE);
image.setAnimation(translateAnimation);
translateAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.cancel();
}
});
}
}
10)setStartOffset方法:设置启动时间
该方法用于设置一个动画执行的启动时间,单位毫秒。系统默认当执行start方法后立刻执行动画,当使用该方法设置后,将延迟一定的时间再启动动画。语法格式:
public void setStartOffset(long startOffset)
其中,参数startOffset为动画的启动时间,单位毫秒。示例:
translateAnimation.setStartOffset(3000);
2.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坐标。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final Animation translateAnimation=new TranslateAnimation(0,300,0,300);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.setDuration(3000);
translateAnimation.setRepeatCount(2);
translateAnimation.setRepeatMode(Animation.REVERSE);
image.setAnimation(translateAnimation);
translateAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.cancel();
}
});
}
}
3.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坐标的伸缩值。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.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);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
rotateAnimation.setDuration(3000);
image.setAnimation(rotateAnimation);
rotateAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
rotateAnimation.cancel();
}
});
}
}
4.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坐标的伸缩值。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final Animation scaleAnimation=new ScaleAnimation (0f,1f,0f,1f,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
scaleAnimation.setDuration(3000);
image.setAnimation(scaleAnimation);
scaleAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
scaleAnimation.cancel();
}
});
}
}
5.AlphaAnimation类:透明度变化动画类
AlphaAnimation类是Android系统中的透明度变化动画类,用于控制View对象的透明度变化,该类继承于Animation类。AlphaAnimation类中的很多方法都与Animation类一致,最常用的方法是AlphaAnimation构造方法。语法格式:
public AlphaAnimation(float fromAlpha,float toAlpha)
其中,参数fromAlpha为开始时刻的透明度,取值范围0~1;toAlpha为结束时刻的透明度,取值范围0~1。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final Animation alphaAnimation=new AlphaAnimation (0.1f,1.0f);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
alphaAnimation.setDuration(3000);
image.setAnimation(alphaAnimation);
alphaAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
alphaAnimation.cancel();
}
});
}
}
6.AnimationSet类:动画集合类
AnimationSet类是Android系统中的动画集合类,用于控制View对象进行多个动作的组合,该类继承于Animation类。AnimationSet类中的很多方法都与Animation类一致,最常用的方法是addAnimation方法,用于为动画集合对象添加动画对象。语法格式:
public void addAnimation(Animation a)
其中,参数a为Animation动画对象,可以是前述任何一种Tween动作。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final Animation translateAnimation=new TranslateAnimation (0,300,0,300);
final Animation scaleAnimation=new ScaleAnimation (0f,1f,0f,1f,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
final Animation alphaAnimation=new AlphaAnimation (0.1f,1.0f);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
translateAnimation.setDuration(10000);
scaleAnimation.setDuration(10000);
alphaAnimation.setDuration(10000);
AnimationsSet set=new AnimationSet(true);
set.addAnimation(translateAnimation);
set.addAnimation(scaleAnimation);
set.addAnimation(alphaAnimation);
set.setFillAfter(true);
set.setFillEnabled(true);
image.setAnimation(set);
set.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
set.cancel();
}
});
}
}
7.AnimationUtils类:动画工具类
AnimationUtils类是Android系统中的动画工具类,提供了控制View对象的一些工具,最常用的方法是loadAnimation方法,该方法用于加载XML格式的动画配置文件。Android系统中,除了在代码中设置动画效果外,还可以在XML配置文件中设置动画的组合动作,这种方式适用性更好。语法格式:
public static Animation loadAnimation(Context context,int id)
其中,参数context为上下文对象;参数id为动画配置文件的Id。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
Animation loadAnimation;
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
loadAnimation=AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.anim);
image.setAnimation(loadAnimation);
loadAnimation.setFillAfter(true);
loadAnimation.setFillEnable(true);
loadAnimation.startNow();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
loadAnimation.cancel();
}
});
}
}
代码中声明了动画对象,其中用到了动画配置文件,里面定义了位置移动和旋转的组合动画效果,代码为:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:toYDelta="0"
android:toYDelta="300"
android:duration="3000" />
<rotate android:fromDegrees="270"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
androud:suration="3000" />
</set>
8.AnimationDrawable类:帧动画类
AnimationDrawable类是Android系统中的帧动画类。帧动画方式类似于放电影的原理,通过顺序播放多张图片来实现动画效果,图片之间有一定的动作连贯性,人眼看来就像真正运动一样。AnimationDrawable类位于android.graphics.drawable软件包中。
1)start方法:开始动画
该方法用于开始动画执行,是帧动画效果执行的主要方法。语法格式:
public void start()
2)stop方法:停止动画
该方法用于停止动画执行,是帧动画效果停止的主要方法。start方法常和stop方法一起来使用。语法格式:
public void stop()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final AnimationDrawable ad=(AnimationDrawable)image.getBackground();
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
ad.start();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
ad.stop();
}
});
}
}
代码中声明了帧动画,为了能够实现动画效果,还需要指定所需要的图片和动画顺序,要使用配置文件,代码为:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/p0" android:duration="50" />
<item android:drawable="@drawable/p1" android:duration="50" />
<item android:drawable="@drawable/p2" android:duration="50" />
<item android:drawable="@drawable/p3" android:duration="50" />
<item android:drawable="@drawable/p4" android:duration="50" />
</animation-list>
3)addFrame方法:添加动画帧
该方法用于为帧动画对象添加动画帧。该方法主要用于动态修改帧动画内容的场合,可以根据需要增加一些动画帧。语法格式:
public void addFrame(Drawable frame,int duration)
其中,参数frame为动画帧的Drawable对象;duration为动画帧的持续时间,单位毫秒。示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final AnimationDrawable ad=(AnimationDrawable)image.getBackground();
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
ad.addFrame(getResources().getDrawable(R.drawable.p0),100);
ad.addFrame(getResources().getDrawable(R.drawable.p1),100);
ad.addFrame(getResources().getDrawable(R.drawable.p2),100);
ad.addFrame(getResources().getDrawable(R.drawable.p3),100);
ad.addFrame(getResources().getDrawable(R.drawable.p4),100);
ad.start();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
ad.stop();
}
});
}
}
4)setOneShot方法:设置播放方式
该方法用于设置帧动画的播放方式,可以是单次播放,也可以是循环播放。在系统默认情况下采用的是单次播放的方式。语法格式:
public void setOneShot(boolean oneShot)
其中,参数oneShot表示了动画是否执行一次,true表示仅执行一次,false表示无限次循环执行动画效果。
5)setAlpha方法:设置透明度
该方法用于设置帧动画播放过程中图片的透明度。语法格式:
public void setAlpha(int alpha)
其中,参数alpha表示图片的透明度,取值范围为0~255。
6)getNumberOfFrames方法:获取帧数
该方法用于获取动画的帧个数,也就是按照顺序播放了几张图片。语法格式:
public int getNumberOfFrames()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final AnimationDrawable ad=(AnimationDrawable)image.getBackground();
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
int num;
ad.start();
num=ad.getNumberOfFrames();
Toast.makeText(getApplicationContext(),"当前动画需要播放"+num+"帧",
Toast.LENGTH_LONG).show();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
ad.stop();
}
});
}
}