如果一张图片较大时,可能手机屏幕显示不开,这样就需要用到图片的移动了,一般在游戏开发中会用到这一部分,因为随着主角的移动,背景是需要变化滴。
没找到相关的代码,只好自己简单写了一个,代码如下:
/*
* DisplayUI.java
*
* Created on 2007年11月1日, 上午10:40
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package com.dcsoft.mobile.dt.ui;
import com.hf.mobile.util.img.IMGTranslate;
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
/**
*
* @author Administrator
*/
public class DisplayUI extends Canvas{
private int screenWidth = 0;//画布的宽度
private int screenHeight = 0;//画布的高度
private int x=0;
private int y = 0;
private Image img = null;
private Command exitCommand = new Command("返回",Command.OK,0);
public static int leftInscreaseValue = 50;
/** Creates a new instance of DisplayUI */
public DisplayUI() {
// System.out.println("在MyCanvas()方法中");
screenWidth = this.getWidth();
screenHeight = getHeight();
this.addCommand(exitCommand);
try {
img = Image.createImage("/img/test.png");
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void paint(Graphics g) {
System.out.println("inpaint");
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,screenWidth,screenHeight);
g.setColor(color);
//Image im= new IMGTranslate().transImage(img,width,height);
g.drawImage(img,x,y,Graphics.LEFT|Graphics.TOP);
}
private void seeRight(){
/*当前图片的宽度*/
int imgWidth = img.getWidth();
/*屏幕画图片的起始位置*/
// System.out.println("x0:"+x);
/*每次图片移动的像素数*/
int move = leftInscreaseValue;
int absX=Math.abs(x);
/*首先判断向右是否还可以移动*/
if(imgWidth-absX-screenWidth>0){
//System.out.println("x1:"+x);
/*计算这次需要移动的像素数*/
if(imgWidth-absX-screenWidth<leftInscreaseValue){
move=imgWidth-absX-screenWidth;
// System.out.println("x2:"+x);
}
/*重新绘制*/
x=x-move;
repaint();
}
}
private void seeLeft(){
/*当前图片的宽度*/
int imgWidth = img.getWidth();
// System.out.println("x:"+x);
/*每次图片移动的像素数*/
int move = leftInscreaseValue;
int absX=Math.abs(x);
/*首先判断当前向左是否可以移动*/
if(absX>0){
/*计算这次需要移动的像素数*/
if(absX<leftInscreaseValue){
x=0;
}
else{
x+=leftInscreaseValue;
}
repaint();
}
}
private void seeUP(){
/*当前图片的宽度*/
int imgHeight = img.getHeight();
//System.out.println("x:"+y);
/*每次图片移动的像素数*/
int move = leftInscreaseValue;
int absY=Math.abs(y);
/*首先判断当前向左是否可以移动*/
if(absY>0){
/*计算这次需要移动的像素数*/
if(absY<leftInscreaseValue){
y=0;
}
else{
y+=leftInscreaseValue;
}
repaint();
}
}
private void seeDown(){
/*当前图片的宽度*/
int imgHeight = img.getHeight();
/*屏幕画图片的起始位置*/
/*每次图片移动的像素数*/
int move = leftInscreaseValue;
int absY=Math.abs(y);
/*首先判断向右是否还可以移动*/
if(imgHeight-absY-screenHeight>0){
// System.out.println("y1:"+y);
/*计算这次需要移动的像素数*/
if(imgHeight-absY-screenHeight<leftInscreaseValue){
move=imgHeight-absY-screenHeight;
// System.out.println("x2:"+y);
}
/*重新绘制*/
y=y-move;
repaint();
}
}
public void keyPressed(int ckeyCode){
int code = getGameAction( ckeyCode);
System.out.println(ckeyCode);
if(code==this.RIGHT ){
seeRight();
}
if(code==this.LEFT ){
seeLeft();
}
if(code==this.UP ){
seeUP();
}
if(code==this.DOWN ){
seeDown();
}
}
//当Canvas显示到当前屏幕的时候此方法自动被调用
public void showNotify(){
}
//当Canvas从当前屏幕删除的时候此方法被调用
public void hideNotify(){
}
public Command getExitCommand(){
return exitCommand;
}
}