您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制如何在手机应用程序中制作动画 正文
如何在手机应用程序中制作动画

如何在手机应用程序中制作动画

点击数:7282 次   录入时间:03-04 11:40:08   整理:http://www.55dianzi.com   电脑-单片机-自动控制
    •abstractvoidrun()

    •voidcancel()

    按照Timer类中所设定的schedule执行run()方法。用cancel()方法能够结束任务。

    现在来看看用线程实现的圆球运动的动画--在这里我们也可以使用计时器来实现。如下所示:(ex.5)

    importjavax.mICroedition.LCDui.Display;

    importjavax.microedition.midlet.*;

    /**

    *球飞出去的动画实例计时器版

    */

    publiCClassTimerMovingBallextendsMIDlet{

    privateDisplaydisplay;

    privateTimerMovingBallCanvascanvas;

    /**

    *构造函数

    */

    publicTimerMovingBall(){

    display=Display.getDisplay(this);

    canvas=newTimerMovingBallCanvas();

    }

    /**

    *运行时的处理

    */

    protectedvoidstartApp()throwsMIDletStateChangeException{

    display.setCurrent(canvas);

    }

    protectedvoidpauseApp(){}

    protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

    }

    importjava.util.*;

    importjavax.microedition.lcdui.*;

    /**

    *球飞出去的实例动画的canvas。

    */

    publicclassTimerMovingBallCanvasextendsCanvas{

    privateintx;//球的x坐标

    privateImageimg;

    privateTimertimer;

    privateTimerTasktask;

    /**

    *构造函数

    */

    publicTimerMovingBallCanvas(){

    //读取画像

    try{

    img=Image.createImage("/back.PNG");

    }catch(Exceptione){

    e.printStackTrace();

    }

    //Timer,TimerTask的设定

    timer=newTimer();

    task=newTimerMovingBallTask(this);

    timer.schedule(task,100,100);

    //从第101毫秒开始在每100毫秒运行任务

    }

    /**

    *描绘方法

    */

    protectedvoidpaint(Graphicsg){

    g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);

    //表示球

    g.setColor(255,0,0);

    g.drawString(“withTimer”,0,0,Graphics.TOP|Graphics.LEFT);

    g.fillArc(x,50,40,40,0,360);

    }

    /**

    *能够变化球的X坐标

    */

    publicvoidincrement(){

    x+=3;

    }

    }

    /**

    *计时器任务根据计时器所设定的时间表,运行run()方法。

    */

    classTimerMovingBallTaskextendsTimerTask{

    privateTimerMovingBallCanvascanvas;

    /**

    *构造函数

    */

    publicTimerMovingBallTask(TimerMovingBallCanvascanvas){

    this.canvas=canvas;

    }

    /**

    *呼叫计时器时所进行的处理

    */

    publicvoidrun(){

    canvas.increment();

    canvas.repaint();

    }

    }

    ex.5

    TimerMovingCanvas类的构造函数中进行下面的计时器设定。

    //Timer,TimerTask的设定

    timer=newTimer();

    task=newTimerMovingBallTask(this);

    timer.schedule(task,100,100);//从第101毫秒开始在每100毫秒运行任务

    在TimerMovingBallTask中,从TimerTask继承的run()被调用,X坐标的递增使得球运动起来。这样有规律地使X坐标递增,就使得圆球在画面上从左到右移动。(图2)。

    publicvoidrun(){

    canvas.increment();

    canvas.repaint();

    }

    図2

    ■双缓冲

    一旦进行动画就要频繁地反复操作描绘处理,画面处理中可能会突然发生屏幕闪烁。为了能够控制屏幕的闪烁,一般会使用双缓冲的手法。用双缓冲存储器并不是直接在画面上进行描绘,而是在被称为屏幕外画像的虚拟画像上描绘全部之后,由于是表示画面,所以能控制屏幕的闪烁。(图3)

    Figure3

    根据手机机种的不同,事先将Canvas类与双缓冲存储器相对应的情况也是有的。换言之,即使实现方没有明确地定义双缓冲存储器,则在用双缓冲存储器的机制进行描绘的情况下,没必要特别关心闪烁的解决方案,但是要在不同的机型上运行。N800的机型已经能适应此双缓冲存储器。为此,开发N800应用程序的时候,有时会有必要在这阐述双缓冲存储器的处理。此时,应该知道终端是否适应双缓冲存储器、以及是否有必要分开处理。

www.55dianzi.com

    使用CANvas类的isDoubleBufferd()方法就能知道是否适应双缓冲存储器。由于使用这种方法可以区分开适应双缓冲存储器的情况和不适应适应的情况,因此无论在什么样的环境下都能够有效控制闪烁现象。示例如下:(ex.6)

    classDoubleBufferdCanvasextendsCanvas{

    ImageoffImg=null;//关闭画面的图片

    /**

    *表示canvas之前所运行的方法

    */

    protectedvoidshowNotify(){

    if(!isDoubleBuffered()){//关闭画面的图片

    offImg=Image.createImage(getWidth(),getHeight());

    }

    }

    /**

    *描绘方法

    */

    protectedvoidpaint(GraphICsg){

    Graphicsbg=null;

    if(offImg!=null){

    bg=offImg.getGraphics();

    }else{

    bg=g;

上一页  [1] [2] [3] [4]  下一页


本文关键字:如何  程序  制作  动画  手机应用  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制

《如何在手机应用程序中制作动画》相关文章>>>