微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 如何制作动画程序

如何制作动画程序

时间:05-07 来源:互联网 点击:

■前言

在前一讲中我们讲述了如何利用低级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提供了计时器功能,它能有规则地、重复地执行或者在指定时间里执行。线程的运算可以是连续的,而不仅仅是按规则的进度。计时器的便利在于系统已经为你准备好特定的方法用于在指

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top