📄 animate.java
字号:
/**
*动画类
*@CopyRight:Move2008
*@Author:bedlang
*@Version 1.0 2003/7/19
*/
package mmae.ui;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class Animate
{
private Image image;
private int x;
private int y;
private int depth;
private int currFrame;
private int frameSeq[];
private boolean visible;
private int mode;
public int frameRows;
public int frameCols;
private void setupFrames(int i, int j)
throws IllegalArgumentException
{
if(i < 1 || j < 1 || image.getWidth() % i != 0 || image.getHeight() % j != 0)
{
throw new IllegalArgumentException();
} else
{
frameCols = image.getWidth() / i;
frameRows = image.getHeight() / j;
return;
}
}
private void createAnimateImage(Image image1)
throws NullPointerException
{
if(image1 == null)
throw new NullPointerException();
if(image1.isMutable())
image = Image.createImage(image1);
else
image = image1;
}
public Animate(Image image1)
throws NullPointerException
{
createAnimateImage(image1);
frameRows = 1;
frameCols = 1;
visible = true;
}
public Animate(Image image1, int i, int j)
throws NullPointerException, IllegalArgumentException
{
createAnimateImage(image1);
setupFrames(i, j);
visible = true;
}
public Animate(Animate Animate)
throws NullPointerException
{
if(Animate == null)
throw new NullPointerException();
x = Animate.x;
y = Animate.y;
depth = Animate.depth;
currFrame = Animate.currFrame;
visible = Animate.visible;
image = Animate.image;
frameRows = Animate.frameRows;
frameCols = Animate.frameCols;
if(Animate.frameSeq == null)
frameSeq = null;
else
frameSeq = Animate.getFrameSequence();
}
public void setPosition(int i, int j)
{
x = i;
y = j;
}
public void setDepth(int i)
{
depth = i;
}
public void move(int i, int j)
{
x += i;
y += j;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public int getDepth()
{
return depth;
}
public int getHeight()
{
return image.getHeight() / frameRows;
}
public int getWidth()
{
return image.getWidth() / frameCols;
}
public void setFrame(int i)
throws ArrayIndexOutOfBoundsException
{
if(i < 0 || i >= getFrameSequence().length)
{
throw new ArrayIndexOutOfBoundsException();
} else
{
currFrame = i;
return;
}
}
public int getFrame()
{
return currFrame;
}
public int getNumRawFrames()
{
return frameRows * frameCols;
}
public void nextFrame()
{
currFrame++;
if(frameSeq == null)
{
if(currFrame >= getNumRawFrames())
currFrame = 0;
} else
if(currFrame >= frameSeq.length)
currFrame = 0;
}
public void prevFrame()
{
if(--currFrame < 0)
if(frameSeq == null)
currFrame = getNumRawFrames() - 1;
else
currFrame = frameSeq.length - 1;
}
public void setVisible(boolean flag)
{
visible = flag;
}
public boolean isVisible()
{
return visible;
}
public final void draw(Graphics g)
throws NullPointerException
{
if(g == null)
throw new NullPointerException();
if(visible && image != null)
{
int i = g.getClipX();
int j = g.getClipY();
int k = g.getClipWidth();
int l = g.getClipHeight();
int i1;
if(frameSeq == null)
i1 = currFrame;
else
i1 = frameSeq[currFrame];
g.setClip(x, y, getWidth(), getHeight());
if(mode==0)
g.drawImage(image, x - (i1 % frameCols) * getWidth(), y - (i1 / frameCols) * getHeight(), g.TOP|g.LEFT);
else
g.drawImage(image, x - (i1 / frameRows) * getWidth(), y - (i1 % frameRows) * getHeight(), g.TOP|g.LEFT);
g.setClip(i, j, k, l);
}
}
/**
设置动画模式,0为从Image中从左向右截取,1为从Image中从上向下截取
*/
public void setMode(int mode1)
{
mode = mode1;
}
public int getMode()
{
return mode;
}
public void setFrameSequence(int ai[])
throws ArrayIndexOutOfBoundsException
{
if(ai == null)
{
frameSeq = null;
} else
{
int i = ai.length;
int j = getNumRawFrames() - 1;
int ai1[] = new int[ai.length];
while(i-- > 0)
{
if(ai[i] < 0 || ai[i] > j)
throw new ArrayIndexOutOfBoundsException();
ai1[i] = ai[i];
}
frameSeq = ai1;
}
currFrame = 0;
}
public int[] getFrameSequence()
{
int ai[];
if(frameSeq == null)
{
int i = getNumRawFrames();
ai = new int[i];
while(i-- > 0)
ai[i] = i;
} else
{
ai = new int[frameSeq.length];
System.arraycopy(frameSeq, 0, ai, 0, frameSeq.length);
}
return ai;
}
public void setImage(Image image1, int i, int j)
throws NullPointerException, IllegalArgumentException
{
int k = getNumRawFrames();
createAnimateImage(image1);
setupFrames(i, j);
if(getNumRawFrames() < k)
{
currFrame = 0;
frameSeq = null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -