Android学习笔记15-Frame Animation动画的实现
2013-07-05 10:12
232 查看
在Android中,动画Animation的实现有两种方式:Tween Animation(渐变动画)和Frame Animation(帧动画)。渐变动画是通过对场景里的对象不断做图像变换(平移、缩放、旋转等)产生动画效果。帧动画则是通过顺序播放事先准备好的图像来产生动画效果,和电影类似。
帧动画主要是通过AnimationDrawable类来实现的。
1.AnimationDrawable类
AnimationDrawable类用于创建由一系列Drawable对象构成的逐帧动画对象,它可以作为一个视图对象的背景。
AnimationDrawable类的常用方法有以下一些:
mAnimationDrawable.addFrame(Drawable frame, int duration);//添加一个帧动画
mAnimationDrawable.getDuration(int i);//获得帧动画的时间
mAnimationDrawable.getFrame(int index);//获得指定索引的Drawable对象
mAnimationDrawable.getNumberOfFrames();//获得帧动画的总数
mAnimationDrawable.isOneShot();//帧动画是否只运行一次
mAnimationDrawable.isRunning();//帧动画是否处于运行状态
mAnimationDrawable.setOneShot(boolean onsShot);//设置帧动画是否只运行一次
mAnimationDrawable.setVisible(boolean visible, boolean restart);//设置帧动画是否可见
mAnimationDrawable.start();//运行帧动画
mAnimationDrawable.stop();//停止帧动画
2.通过Java代码实现Frame Animation动画
要实现Frame Animation动画,需要创建一个AnimationDrawable对象来表示Frame动画,然后通过addFrame()方法把每一帧要显示的内容添加进去,最后通过start()方法就可以播放动画了。
setOneShot()方法可以设置动画是否需要重复播放。
在具体实现中,需要预先准备了15张单帧动画图像,分别命名为image1到image15,并存放在工程的res/drawable目录下。然后可以通过如下方法将每一帧的图像加载到AnimationDrawable对象中。
加载单帧图像到AnimationDrawable对象中
在本案例中,设置了按键事件监听,通过中键来启动动画,通过Back键来关闭动画(实际是通过关闭当前Activity来实现的)。
MainActivity.java源代码如下:
MainActivity.java源代码
FrameView.java源代码如下:
FrameView.java源代码
3.通过xml布局文件实现Frame Animation动画
逐帧动画的实现,也可以通过xml布局文件来完成。xml文件可以存放在工程的res/anim目录下。
Frame动画的xml文件常用属性如下:
android:drawable[drawable]//加载Drawable对象
android:duration[long]//每一帧动画的持续时间(单位ms)
android:oneshot[boolean]//动画是否只运行一次,true运行一次,false重复运行
android:visible[boolean]//Drawable对象的初始能见度状态,true可见,false不可见(默认为false)
使用xml来实现Frame动画时,首先可以通过setBackgroundResource()方法来加载xml动画布局文件,然后通过getBackground()方法获得动画,再通过setBackgroundDrawable()方法设置要显示的动画,最后通过start()方法来播放动画即可。
具体实现只需将FrameView.java源代码稍加改动即可,具体源代码如下:
FrameView.java源代码
此外,还需要补充一个frameanimation.xml文件,具体源代码如下:
frameanimation.xml源代码
相关资料:
详解Android动画之Frame Animation http://blog.csdn.net/liuhe688/article/details/6657776
帧动画主要是通过AnimationDrawable类来实现的。
1.AnimationDrawable类
AnimationDrawable类用于创建由一系列Drawable对象构成的逐帧动画对象,它可以作为一个视图对象的背景。
AnimationDrawable类的常用方法有以下一些:
mAnimationDrawable.addFrame(Drawable frame, int duration);//添加一个帧动画
mAnimationDrawable.getDuration(int i);//获得帧动画的时间
mAnimationDrawable.getFrame(int index);//获得指定索引的Drawable对象
mAnimationDrawable.getNumberOfFrames();//获得帧动画的总数
mAnimationDrawable.isOneShot();//帧动画是否只运行一次
mAnimationDrawable.isRunning();//帧动画是否处于运行状态
mAnimationDrawable.setOneShot(boolean onsShot);//设置帧动画是否只运行一次
mAnimationDrawable.setVisible(boolean visible, boolean restart);//设置帧动画是否可见
mAnimationDrawable.start();//运行帧动画
mAnimationDrawable.stop();//停止帧动画
2.通过Java代码实现Frame Animation动画
要实现Frame Animation动画,需要创建一个AnimationDrawable对象来表示Frame动画,然后通过addFrame()方法把每一帧要显示的内容添加进去,最后通过start()方法就可以播放动画了。
setOneShot()方法可以设置动画是否需要重复播放。
在具体实现中,需要预先准备了15张单帧动画图像,分别命名为image1到image15,并存放在工程的res/drawable目录下。然后可以通过如下方法将每一帧的图像加载到AnimationDrawable对象中。
加载单帧图像到AnimationDrawable对象中
mAnimationDrawable = new AnimationDrawable(); for (int i = 1; i <= 15; i++) { int resourcesId = getResources().getIdentifier("image"+i, "drawable", mContext.getPackageName()); mDrawable = getResources().getDrawable(resourcesId); mAnimationDrawable.addFrame(mDrawable, 500); }
在本案例中,设置了按键事件监听,通过中键来启动动画,通过Back键来关闭动画(实际是通过关闭当前Activity来实现的)。
MainActivity.java源代码如下:
MainActivity.java源代码
MainActivity.java源代码 package com.example.android_frameanimation; import android.os.Bundle; import android.view.KeyEvent; import android.app.Activity; public class MainActivity extends Activity { FrameView mFrameView; //定义帧动画对象 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mFrameView = new FrameView(this); setContentView(mFrameView); //加载帧动画视图 } //按键按下事件响应 public boolean onKeyDown(int keyCode, KeyEvent event) { if ( mFrameView == null ) { return false; } if (keyCode == KeyEvent.KEYCODE_BACK) { //按下Back键结束当前Activity this.finish(); return true; } mFrameView.onKeyDown(keyCode, event); return true; } }
FrameView.java源代码如下:
FrameView.java源代码
FrameView.java源代码
package com.example.android_frameanimation;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.view.KeyEvent;
import android.view.View;
public class FrameView extends View {
AnimationDrawable mAnimationDrawable; //AnimationDrawable对象
Drawable mDrawable; //Drawable对象
Context mContext; //Context对象
public FrameView(Context context) {
super(context);
mContext = context;
//使用Java代码实现帧动画效果
mAnimationDrawable = new AnimationDrawable(); for (int i = 1; i <= 15; i++) { int resourcesId = getResources().getIdentifier("image"+i, "drawable", mContext.getPackageName()); mDrawable = getResources().getDrawable(resourcesId); mAnimationDrawable.addFrame(mDrawable, 500); }
mAnimationDrawable.setOneShot(false);
this.setBackgroundDrawable(mAnimationDrawable);
}
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
//按键按下事件响应
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { //按下中键开始动画
mAnimationDrawable.start();
}
return true;
}
}
3.通过xml布局文件实现Frame Animation动画
逐帧动画的实现,也可以通过xml布局文件来完成。xml文件可以存放在工程的res/anim目录下。
Frame动画的xml文件常用属性如下:
android:drawable[drawable]//加载Drawable对象
android:duration[long]//每一帧动画的持续时间(单位ms)
android:oneshot[boolean]//动画是否只运行一次,true运行一次,false重复运行
android:visible[boolean]//Drawable对象的初始能见度状态,true可见,false不可见(默认为false)
使用xml来实现Frame动画时,首先可以通过setBackgroundResource()方法来加载xml动画布局文件,然后通过getBackground()方法获得动画,再通过setBackgroundDrawable()方法设置要显示的动画,最后通过start()方法来播放动画即可。
具体实现只需将FrameView.java源代码稍加改动即可,具体源代码如下:
FrameView.java源代码
FrameView.java源代码 package com.example.android_frameanimation; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.view.KeyEvent; import android.view.View; import android.widget.ImageView; public class FrameView extends View { AnimationDrawable mAnimationDrawable; //AnimationDrawable对象 Drawable mDrawable; //Drawable对象 Context mContext; //Context对象 public FrameView(Context context) { super(context); mContext = context; //使用xml文件实现帧动画效果 ImageView mImageView = new ImageView(mContext); mImageView.setBackgroundResource(R.anim.frameanimation); mAnimationDrawable = (AnimationDrawable) mImageView.getBackground(); this.setBackgroundDrawable(mAnimationDrawable); mAnimationDrawable.setOneShot(false); this.setBackgroundDrawable(mAnimationDrawable); } public void onDraw(Canvas canvas) { super.onDraw(canvas); } //按键按下事件响应 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { //按下中键开始动画 mAnimationDrawable.start(); } return true; } }
此外,还需要补充一个frameanimation.xml文件,具体源代码如下:
frameanimation.xml源代码
frameanimation.xml源代码 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/image1" android:duration="1000" /> <item android:drawable="@drawable/image2" android:duration="1000" /> <item android:drawable="@drawable/image3" android:duration="1000" /> <item android:drawable="@drawable/image4" android:duration="1000" /> <item android:drawable="@drawable/image5" android:duration="1000" /> <item android:drawable="@drawable/image6" android:duration="1000" /> <item android:drawable="@drawable/image7" android:duration="1000" /> <item android:drawable="@drawable/image8" android:duration="1000" /> <item android:drawable="@drawable/image9" android:duration="1000" /> <item android:drawable="@drawable/image10" android:duration="1000" /> <item android:drawable="@drawable/image11" android:duration="1000" /> <item android:drawable="@drawable/image12" android:duration="1000" /> <item android:drawable="@drawable/image13" android:duration="1000" /> <item android:drawable="@drawable/image14" android:duration="1000" /> <item android:drawable="@drawable/image15" android:duration="1000" /> </animation-list>
相关资料:
详解Android动画之Frame Animation http://blog.csdn.net/liuhe688/article/details/6657776
相关文章推荐
- Android学习笔记15:Frame Animation动画的实现
- Android学习笔记15:Frame Animation动画的实现
- Android学习笔记15---拖动条的实现
- Android学习笔记-tween动画之xml实现
- Android学习笔记_39_tween动画的实现(Animation和Frame)
- android动画实现-Frame animation(一)
- android动画实现-Frame animation(二)
- android学习笔记---54_tween动画的实现
- android学习笔记(九)——动画效果的实现逐帧动画
- Frame Animation动画的实现
- Android学习笔记14:Tween Animation动画的实现
- Android学习笔记----实现卡牌翻转动画
- Android Animation 两种动画实现 Tween Animation和Frame Animation
- android学习笔记(九)——动画效果的实现1tween动画
- android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072
- Android学习笔记——用ObjectAnimator平移动画仿微信表情雨的简单实现
- android学习笔记---56_activity切换动画与页面切换动画,自定义activity窗口切换动画效果的实现.
- Android学习笔记_39_tween动画的实现(Animation和Frame)
- Android学习笔记14-Tween Animation动画的实现
- Android学习笔记14:Tween Animation动画的实现