⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 animatemid.java

📁 J2ME MIDP 2.0 无线设备编程的一些源码
💻 JAVA
字号:
//animateMID.java file
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.io.*;

public class animateMID extends MIDlet implements CommandListener
{

    private Command exitCommand, pauseCommand, resumeCommand;
    private DemoCanvas myCanvas;
    private MyRun runRepaint;
    public animateMID()
    {
        exitCommand =new Command("Exit",Command.EXIT,1);
        pauseCommand =new Command("Pause",Command.SCREEN,2);
        resumeCommand =new Command("Resume",Command.SCREEN,2);
        myCanvas =new DemoCanvas();
        //添加命令
        myCanvas.addCommand(exitCommand);
        myCanvas.setCommandListener(this);
        //创建线程
        runRepaint = new MyRun(myCanvas);
        new Thread(runRepaint).start();
    }
    
    protected void startApp( ) throws MIDletStateChangeException
    {//开始执行程序或者恢复执行程序
        myCanvas.removeCommand(resumeCommand); //从菜单上删除恢复命令
        myCanvas.addCommand(pauseCommand); //在菜单上添加暂停命令
        runRepaint.resume(); 
        Display.getDisplay(this).setCurrent(myCanvas);
    }


    protected void pauseApp(  )
    {
        runRepaint.pause();
        myCanvas.removeCommand(pauseCommand);
        myCanvas.addCommand(resumeCommand);
    }

    protected void destroyApp( boolean p1 )
    {
        runRepaint.pause();
    }

    public void commandAction(Command c,Displayable d)
    {
        if (c ==exitCommand)
        {
            destroyApp(false);
            notifyDestroyed();
        }
        else if (c ==pauseCommand)
        {
            pauseApp();
        }
        else if (c ==resumeCommand)
        {
            try
            {
                startApp();
            }
            catch(MIDletStateChangeException e)
            {
                System.out.println("startApp error : " + e.getMessage()); 
            }
        }
    }
    //定义实现Runnable接口的类
    class MyRun implements Runnable
    {
        private DemoCanvas canvas;
        private boolean paused;//是否暂停刷新屏幕
        public MyRun (DemoCanvas canvasDraw)
        {//保存需要绘制的画布
            canvas = canvasDraw;
            paused = true;
        }
        //暂停
        void pause()
        {
            paused = true;
        }
        //恢复
        void resume()
        {
            paused = false;
        }
        // Runnable接口需要重载的函数
        public void run()
        {
            while(true)
            {
                if( !paused)
                {//如果程序没有暂停则刷新屏幕
                    canvas.stepUp();
                }
                try 
                { 
                    Thread.sleep(300);
                }
                catch(InterruptedException e) 
                { 
                    System.out.println("sleep error : " + e.getMessage()); 
                }
            }
        }
    }
    //定义画布类
    public class DemoCanvas extends Canvas
    {
        Image imageLogo;
        int offsetY = 0;
        int clipX, clipY, clipWidth, clipHeight;//保存裁剪区位置
        int canWidth, canHeight;
        int drawX, drawY;
        public DemoCanvas() 
        {
            try
            {//装入png图片文件
                imageLogo = Image.createImage("/pic/wyy_logo.png");
            }
            catch (IOException e)
            {//需要import java.io.*;
                System.out.println("load png resource error " + e.getMessage());
                imageLogo = null;
            }
            clipX = (getWidth()-imageLogo.getWidth())/2;
            clipY = (getHeight()-imageLogo.getHeight())/2;
            clipWidth = imageLogo.getWidth();
            clipHeight =imageLogo.getHeight();
            canWidth = getWidth();
            canHeight = getHeight();
            drawX = canWidth/2;
            drawY = canHeight/2;
        }

        public void stepUp()
        {//将作图的原点上向移动
            offsetY += 3;
            drawY = canHeight/2-offsetY%clipHeight;
            if(drawY < clipY)//如果超出区域则进行调整
                drawY += clipHeight;
            repaint();
            serviceRepaints();//要求canvas立即重绘
        }

        public void paint(Graphics g) 
        {//在屏幕的正中绘制图片
            g.setColor(0xffffff);
            g.fillRect(0,0,getWidth(),getHeight());
            //把裁剪区设置在屏幕正中,而且面积与图像相同
            g.setClip(clipX, clipY,clipWidth,clipHeight);
            //绘图,为了图像能够在裁剪区内连贯,必须绘制两次
            //绘制时是在同一个点进行绘制,但是采用了不同的对齐方式
            
            g.drawImage(imageLogo, drawX, drawY,
                        Graphics.BOTTOM | Graphics.HCENTER);
            g.drawImage(imageLogo, drawX, drawY,
                        Graphics.TOP | Graphics.HCENTER);
        }
    }   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -