首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

基于OPhone 2.0的2D卡通片实践(一)

2012-08-21 
基于OPhone 2.0的2D动画实践(一)基于OPhone 2.0的2D动画实践(一)OPhone平台开发, 2010-10-18 16:40:31 标

基于OPhone 2.0的2D动画实践(一)
基于OPhone 2.0的2D动画实践(一)OPhone平台开发, 2010-10-18 16:40:31 标签 : OPhone2.0 2D 动画

  从anim.xml文件的内容可以看出,一个标准的动画文件由一个<animation-list>标签和若干<item>标签组成。其中<animation-list>标签的一个关键属性是android:oneshot,如果该属性值为true,表示帧动画只运行一遍,也就是从第1个图像切换到最后一个图像后,动画就会停止。如果该属性值为false,表示帧动画循环播放。android:oneshot是可选属性,默认值是false。
  <item>标签的android:drawable属性指定了动画中的静态图像资源ID。帧动画播放的顺序就是<item>标签的定义顺序。android:duration属性指定了每个图像的停留时间。在test.xml文件中指定了每个图像的停留时间为50毫秒。android:drawable和android:duration都是必选属性,不能省略。
  编写完动画文件后,就需要装载动画文件,并创建AnimationDrawable对象。AnimationDrawable是Drawable的子类,并在Drawable的基础上提供了控制动画的功能。读者可以使用如下的代码来根据test.xml文件创建AnimationDrawable对象。


  为了演示在原有动画的基础上添加新的动画,本例引入了第2个GIF动画文件,并将这个GIF动画文件分解成6个GIF静态图像(文件名从myanim1.gif至myanim6.gif)。定义这6个GIF文件的动画文件是frame_animation1.xml。
  本例的功能包含了"开始动画"、"停止动画"、"运行一次动画"和"添加动画",这4个功能分别对应于4个按钮。当单击【开始动画】按钮后,动画开始播放,如图1所示。单击【添加动画】按钮,播放完第1个动画后,又会继续播放第2个动画,如图2所示。在播放完第2个动画后,又会继续播放第1个动画。

基于OPhone 2.0的2D卡通片实践(一)

  图1? 播放第1个动画

基于OPhone 2.0的2D卡通片实践(一)

  图2? 播放第2个动画


  本例的完整代码如下:

  package net.blogjava.mobile;   import android.app.Activity;   import android.graphics.drawable.AnimationDrawable;   import android.os.Bundle;   import android.view.View;   import android.view.View.OnClickListener;   import android.widget.Button;   import android.widget.ImageView;   public class Main extends Activity implements OnClickListener   {   private ImageView ivAnimView;   private AnimationDrawable animationDrawable;   private AnimationDrawable animationDrawable1;   private Button btnAddFrame;   @Override   public void onClick(View view)   {   switch (view.getId())   {   // 只播放一次动画   case R.id.btnOneShot:   animationDrawable.setOneShot(true);   animationDrawable.start();   break;   // 循环播放动画   case R.id.btnStartAnim:   animationDrawable.setOneShot(false);   animationDrawable.stop();   animationDrawable.start();   break;   // 停止播放动画   case R.id.btnStopAnim:   animationDrawable.stop();   if (animationDrawable1 != null)   {   // 停止新添加的动画   animationDrawable1.stop();   }   break;   // 添加动画   case R.id.btnAddFrame:   if (btnAddFrame.isEnabled())   {   // 获得新添加动画的AnimationDrawable对象   animationDrawable1 = (AnimationDrawable) getResources()   .getDrawable(R.anim.frame_animation1);   // 添加动画,动画停留(播放)时间是2秒   animationDrawable.addFrame(animationDrawable1, 2000);   btnAddFrame.setEnabled(false);   }   break;   }   }   @Override   public void onCreate(Bundle savedInstanceState)   {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   Button btnStartAnim = (Button) findViewById(R.id.btnStartAnim);   Button btnStopAnim = (Button) findViewById(R.id.btnStopAnim);   Button btnOneShot = (Button) findViewById(R.id.btnOneShot);   btnAddFrame = (Button) findViewById(R.id.btnAddFrame);   btnStartAnim.setOnClickListener(this);   btnStopAnim.setOnClickListener(this);   btnOneShot.setOnClickListener(this);   btnAddFrame.setOnClickListener(this);   ivAnimView = (ImageView) findViewById(R.id.ivAnimView);   ivAnimView.setBackgroundResource(R.anim.frame_animation);   Object backgroundObject = ivAnimView.getBackground();   animationDrawable = (AnimationDrawable) backgroundObject;   }   }


  总结
  本文主要介绍了帧动画的原理,并介绍了如何利用OPhone SDK中的API加载并运行帧动画。最后给出了一个例子来用帧动画的方式播放gif动画。
?

  作者介绍
  李宁,东北大学计算机专业硕士,拥有超过10年的软件开发经验。曾任国内某知名企业项目经理;目前担任eoeandroid和ophonesdn版主;中国移动开发者社区OPhone专家;51CTO客作专家;CSDN博客专家。曾领导并参与开发了多个大中型项目。目前主要从事Android及其相关产品的研发。从2005年进入写作领域以来,为《程序员》、《电脑编程技巧与维护》、《电脑报》、IT168、天极网等平面媒体和网络媒体撰写了一百多篇原创技术和评论文章。并在个人blog(http://nokiaguy.blogjava.net)上发表了大量的原创技术文章。2007年获《电脑编程技巧与维护》优秀作者。2009年获得OPhone征文大赛二等奖。个人著作:《Android/OPhone开发完全讲义》、《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》、《Java Web开发速学宝典》。

热点排行