如何制作动画程序
■前言
本文引用地址:http://www.amcfsurvey.com/article/149130.htm在前一讲中我们讲述了如何利用低级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提供了计时器功能,它能有规则地、重复地执行或者在指定时间里执行。线程的运算可以是连续的,而不仅仅是按规则的进度。计时器的便利在于系统已经为你准备好特定的方法用于在指定时间或定时执行。
■4-1-2-1时间的使用
Timer类和TimerTask类能够实现计时器的功能。
实例化一个TIMER的类,再调用一个继承了TIMERTASK的类做SCHEDULE。这样,TimerTask子类的run()就会在指定时间或周期被Timer实例呼叫。(表1)
评论