我们知道,MIDP1.0中并没有提供图片翻转的功能。但是在MIDP2.0中,我们可以利用Sprite的setTransform(int transform)方法来达到目的。在该方法中,transform参数的取值范围为8个常量之一,这8个常量分别是:
Sprite.TRANS_MIRROR:让精灵左右镜像变换
Sprite.TRANS_MIRROR_ROT180: 让精灵左右镜像变换后,再绕其中心顺时针旋转180度
Sprite.TRANS_MIRROR_ROT270: 让精灵左右镜像变换后,再绕其中心顺时针旋转270度
Sprite.TRANS_MIRROR_ROT90: 让精灵左右镜像变换后,再绕其中心顺时针旋转90度
Sprite.TRANS_NONE: 对精灵不做任何变换
Sprite.TRANS_ROT180: 让精灵绕其中心顺时针旋转180度
Sprite.TRANS_ROT270: 让精灵绕其中心顺时针旋转270度
Sprite.TRANS_ROT90: 让精灵绕其中心顺时针旋转90度
尽管MIDP1.0不直接提供图片翻转的功能,不过我们只要利用creatImage,setClip,drawImage等方法,也可以在MIDP1.0的运行环境下模拟出图片翻转的效果,不过在创建可变图片的时候,在很多手机上只能创建背景为白色的空白图片,颇为遗憾。下面就是一个创建翻转图片的工具类的例子。
Sprite.TRANS_MIRROR:让精灵左右镜像变换
Sprite.TRANS_MIRROR_ROT180: 让精灵左右镜像变换后,再绕其中心顺时针旋转180度
Sprite.TRANS_MIRROR_ROT270: 让精灵左右镜像变换后,再绕其中心顺时针旋转270度
Sprite.TRANS_MIRROR_ROT90: 让精灵左右镜像变换后,再绕其中心顺时针旋转90度
Sprite.TRANS_NONE: 对精灵不做任何变换
Sprite.TRANS_ROT180: 让精灵绕其中心顺时针旋转180度
Sprite.TRANS_ROT270: 让精灵绕其中心顺时针旋转270度
Sprite.TRANS_ROT90: 让精灵绕其中心顺时针旋转90度
尽管MIDP1.0不直接提供图片翻转的功能,不过我们只要利用creatImage,setClip,drawImage等方法,也可以在MIDP1.0的运行环境下模拟出图片翻转的效果,不过在创建可变图片的时候,在很多手机上只能创建背景为白色的空白图片,颇为遗憾。下面就是一个创建翻转图片的工具类的例子。
- import javax.microedition.lcdui.Graphics;
- import javax.microedition.lcdui.Image;
- /**
- * 图像工具类
- *
- * @author Jagie
- *
- */
- public class ImageUtil {
- /**
- * 变换常量,同javax.microedition.lcdui.game.Sprite中的变换常量
- */
- public final static int TRANS_MIRROR = 2;
- public final static int TRANS_NONE = 0;
- public final static int TRANS_ROT90 = 5;
- public final static int TRANS_ROT180 = 3;
- public final static int TRANS_ROT270 = 6;
- public final static int TRANS_MIRROR_ROT90 = 7;
- public final static int TRANS_MIRROR_ROT180 = 1;
- public final static int TRANS_MIRROR_ROT270 = 4;
- public static final Image transformImage(Image srcImage, int transform) {
- Image result = null;
- int srcW = srcImage.getWidth();
- int srcH = srcImage.getHeight();
- Graphics g = null;
- switch (transform) {
- //不做任何变换
- case TRANS_NONE:
- result = Image.createImage(srcImage);
- break;
- //左右镜像变换
- case TRANS_MIRROR:
- result = Image.createImage(srcW, srcH);
- g = result.getGraphics();
- for (int i = 0; i < srcW; i++) {
- g.setClip(i, 0, 1, srcH);
- g.drawImage(srcImage, i * 2 - srcW, 0, Graphics.TOP
- | Graphics.LEFT);
- }
- break;
- //顺时针旋转90度
- case TRANS_ROT90:
- result = Image.createImage(srcH, srcW);
- g = result.getGraphics();
- for (int i = 0; i < srcH; i++) {
- for (int j = 0; j < srcW; j++) {
- g.setClip(i, j, 1, 1);
- g.drawImage(srcImage, i - j, i + j - srcH, Graphics.TOP
- | Graphics.LEFT);
- }
- }
- break;
- //先左右镜像变换,再顺时针旋转270度
- case TRANS_MIRROR_ROT270:
- result = Image.createImage(srcH, srcW);
- g = result.getGraphics();
- for (int i = 0; i < srcH; i++) {
- for (int j = 0; j < srcW; j++) {
- g.setClip(i, j, 1, 1);
- g.drawImage(srcImage, i - j, j - i, Graphics.TOP
- | Graphics.LEFT);
- }
- }
- break;
- //顺时针旋转180度
- case TRANS_ROT180:
- result=transformImage(srcImage,TRANS_MIRROR_ROT180);
- result=transformImage(result,TRANS_MIRROR);
- break;
- //先左右镜像变换,再顺时针旋转180度,相当于上下镜像变换
- case TRANS_MIRROR_ROT180:
- result = Image.createImage(srcW, srcH);
- g = result.getGraphics();
- for (int i = 0; i < srcH; i++) {
- g.setClip(0, i, srcW, 1);
- g.drawImage(srcImage, 0, 2*i-srcH, Graphics.TOP
- | Graphics.LEFT);
- }
- break;
- //先左右镜像变换,再顺时针旋转90度。相当于先顺时针旋转90度,再上下镜像变换
- case TRANS_MIRROR_ROT90:
- result=transformImage(srcImage,TRANS_ROT90);
- result=transformImage(result,TRANS_MIRROR_ROT180);
- break;
- //顺时针旋转270度。相当于先TRANS_MIRROR_ROT270,再上下镜像变换
- case TRANS_ROT270:
- result=transformImage(srcImage,TRANS_MIRROR_ROT270);
- result=transformImage(result,TRANS_MIRROR_ROT180);
- break;
- }
- return result;
- }
- }
运行效果图如下: