将屏幕信息生成IMAGE显示并实现上下移动:
起初这样写的(错误的):
Graphics save = g;
if (offImage != null)
g= offImage.getGraphics();
g.setColor(128, 128, 0);
g.fillRoundRect((w - 100) / 2, (h - 60) / 2, 100, 60, 5, 3);
g.setColor(color);
g.drawString(test, 0, 0, 0);
g.drawString(test, 10, h - fontH, 0);
y += hh;
save.setColor(0xFFFFFF);
save.fillRect(0, 0, w, h);
save.setColor(color);
save.drawImage(offImage, 0, y, Graphics.TOP | Graphics.LEFT);
这样写总实现不了上下移动(也就是改变后的图片未重画到屏幕上),后改为如下(红色部分):
public class SimpleCanvas extends Canvas implements Runnable {
int w;//屏幕宽度
int h;//屏幕高度
private Image offImage = null, backImage = null;//图片
Graphics g;//画笔
int hh, fontH = Font.getDefaultFont().getHeight();//控制变量,及默认字体高度
int y = 0;//y坐标
String test = "测试";
int color;//默认颜色
/**
* 构造方法初始化信息
* */
public SimpleCanvas() {
w = getWidth();
h = getHeight();
offImage = Image.createImage(w, h);
backImage = Image.createImage(w, h);
g = backImage.getGraphics();
color = g.getColor();
}
/**
* 线程
* */
public void run() {
while (true) {
tick();
rander();
repaint();
// this.serviceRepaints();//强制重画
try {
Thread.sleep(30);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void tick() {
}
/**
*
* 画方法
* */
private void rander() {
Graphics save = null;
if (offImage != null)
save = offImage.getGraphics();
save.setColor(128, 128, 0);
save.fillRoundRect((w - 100) / 2, (h - 60) / 2, 100, 60, 5, 3);
save.setColor(color);
save.drawString(test, 0, 0, 0);
save.drawString(test, 10, h - fontH, 0);
y += hh;
g.setColor(0xFFFFFF);
g.fillRect(0, 0, w, h);
g.setColor(color);
g.drawImage(offImage, 0, y, Graphics.TOP | Graphics.LEFT);
}
/**
*
* 释放
* */
protected void keyReleased(int keyCode) {
super.keyReleased(keyCode);
if (keyCode == -4) {
hh = 0;
}
if (keyCode == -3) {
hh = 0;
}
if (keyCode == -1) {
hh = 0;
}
if (keyCode == -2) {
hh = 0;
}
if (keyCode == -5) {
}
}
/**
*
* 按下
* */
protected void keyPressed(int keyCode) {
if (keyCode == -1 && (y + h - fontH) > 0) {
hh -= 10;
} else if (keyCode == -2 && y < (h - fontH * 2)) {
hh += 10;
} else if (keyCode == -3) {
} else if (keyCode == -4) {
} else if (keyCode == -5) {
}
}
protected void keyRepeated(int keyCode) {
super.keyRepeated(keyCode);
}
protected void paint(Graphics gg) {
gg.drawImage(backImage, 0, 0, 0);
}
总结:
加红地方注意画笔使用,每张图片的画笔不能混乱.为什么会第一次不能实现,我觉得是主画笔变为了offImage的画笔了,在之前即使赋给save,save是个局部变量也不能画出整个画面。