如何制作动画程序
■前言
在前一讲中我们讲述了如何利用低级API制作图表应用程序的方法。如果仅仅是图表内容的表示,那么在WEB上就可以用静止的页面表示。但是在手机应用程序中表示的话,就能让图表内容具有动感。这就是应用程序与WEB的区别,这也正是其优点所在。在本讲中我们将进一步讲述如何在手机应用程序中制作动画,并详细介绍其具体操作方法。
■4-1动画
基本上,动画能够表现出文字、图形、图片等的描绘位置和画面自身的连续变化。目前的程序中,按下按键,就会实行既定的方法。直到实行完既定方法之后才能进行其他方法操作。但是,表示动画过程中,不实行动画表示以外的方法就没有什么意义,因此应该有必要在表示动画的同时也可以实行其他的方法。所以掌握线程和计时器技术的知识和应用是必不可少的。接下来,我们将详细介绍线程和计时器。
■4-1-1线程
线程是执行程序的最小单位,用来执行Standalone的Java应用程序的main()方法。当你需要同步执行多个操作,可以用多线程并发执行。使用这种线程的程序被称为“多线程程序”。
■4-1-1-1线程的使用
首先我们尽快学习怎样使用“线程”。有两种方法能使用线程:Runnable接口的使用方法和Thread类的继承类的定义方法。在此,我们使用前一个方法—实现Runnable接口的方法。
实现Runnable接口的类必须要覆盖run()方法。覆盖的run()方法中记述了用线程执行的处理。(ex.1)
classTestCanvasextendsCanvasimplementsRunnable{
/**
*线程执行的处理
**/
publicvoidrun(){
//记述处理
.
.
}
/**
*描绘方法
**/
publicvoidpaint(Graphicsg){
//描绘处理
.
.
}
}
ex.1
另外一种方法是使用线程类Thread。如下所示:用构造函数传递一个参数到该类的实例,该参数是实现Runnable接口的。使用start()方法就启动该线程了。(ex.2)
Runnablerunnable=newTestCanvas();//实现Runnable类
Threadthread=newThread(runnable);
thread.start();
ex.2
■4-1-1-2制作简单的动画
接着我们来看线程如何被用于制作简单的动画。在下面的实例中,球从左向右运动。(ex.3)
importjavax.microedition.lcdui.Display;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
/**
*球飞出去的实例动画
*/
publicclassMovingBallextendsMIDlet{
privateDisplaydisplay;
privateMovingBallCanvascanvas;
/**
*构造函数
*/
publicMovingBall(){
display=Display.getDisplay(this);
canvas=newMovingBallCanvas();
}
/**
*运行时的处理
*/
protectedvoidstartApp()throwsMIDletStateChangeException{
display.setCurrent(canvas);
}
protectedvoidpauseApp(){}
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}
}
importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Graphics;
/**
*球飞出去的实例动画的canvas。
*/
publicclassMovingBallCanvasextendsCanvasimplementsRunnable{
privateintx;//球的X坐标
/**
*构造函数
*/
publicMovingBallCanvas(){
Threadth=newThread(this);
th.start();
}
/**
*线程运行的处理
*/
publicvoidrun(){
while(true){
x+=3;//更改球的坐标
repaint();//再次描绘
try{
Thread.sleep(100);//100毫秒待机
}catch(InterruptedExceptione){
}
}
}
/**
*描绘方法
*/
protectedvoidpaint(Graphicsg){
//清除画面
g.setColor(255,255,255);//白色
g.fillRect(0,0,getWidth(),getHeight());
//表示球
g.setColor(255,0,0);
g.fillArc(x,50,20,20,0,360);
}
}
Figure1
■4-1-1-3线程的待机处理
■4-1-1-3线程的待机处理
我们看看run()是如何支持等待机制的。如果没有任何等待,球会迅速从左向右飞而我们无法察觉。为此,执行Thread中的静态方法sleep。在其参数中指定等待时间(单位毫秒)。(ex.4)
Figure1
■
4-1-1
-3线程的待机处理
我们看看run()是如何支持等待机制的。如果没有任何等待,球会迅速从左向右飞而我们无法察觉。为此,执行Thread中的静态方法sleep。在其参数中指定等待时间(单位毫秒)。(ex.4)
Thread.sleep(100);//100毫秒待机
ex.4
如此例所示,处理和处理之间能够待机100毫秒,按另外观点看,与在100毫秒的定期间隔下运行处理是一样的。定期间隔下的处理,使用名为Timer的类同样能够实现。下面说明一下Timer。
■4-1-2Timer
JAVA提供了计时器功能,它能有规则地、重复地执行或者在指定时间里执行。线程的运算可以是连续的,而不仅仅是按规则的进度。计时器的便利在于系统已经为你准备好特定的方法用于在指
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- Linux内核解读入门(11-09)
- Linux操作系统网络驱动程序编写(04-11)
- Linux系统对ISA总线DMA的实现(06-19)
- 基于MPEG-4的嵌入式多媒体监控系统中压缩/解压卡的设计与实现(10-15)
- Windows CE下驱动程序开发基础(04-10)