📄 animatemid.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 + -