midp2.0 中drawRegion() 方法在midp1.0 中不支持,而其Script 类也是因为使用了drawRegion()方法,使得Script这个广泛使用的精灵类得到了限制, 参考以下代码希望对解决以上问题能提供一点参考价值。
/**
* 画图方法 默认使用MIDP 2.0 方法,midp 1.0 需要对IsApiV1=true 设置
*
* @param g
* @param image
* 原图
* @param modX
* 原图上的X坐标
* @param modY
* 原图上的y坐标
* @param w
* Clip 宽
* @param h
* Clip 高
* @param transform
* 翻转情况
* @param screenX
* 屏幕X
* @param screenY
* 屏幕Y
*/
public static void draw(Graphics g, Image image, int modX, int modY, int w,
int h, int transform, int screenX, int screenY, int anthor) {
if(IsApiV1){//是否是midp1.0 忽略翻转
drawClip(g,image,screenX, screenY, w, h, modX, modY,
anthor);
}else{
g.drawRegion(image, modX, modY, w, h, transform, screenX, screenY,
anthor);
}
}
/**
* 画翻转后的图片
*
* @param g
* @param image
* 原图
* @param clipx
* 目的画布上的X坐标
* @param clipy
* 目的画布上的Y坐标
* @param clipw
* 显示的宽
* @param cliph
* 显示的高
* @param offx
* 原图上的显示域x坐标
* @param offy
* 原图上的显示域y坐标
* @param anthor 锚点
*/
private static void drawClip(Graphics g, Image image, int clipx, int clipy,
int clipw, int cliph, int offx, int offy,int anthor) {
int x, y, w, h;
x = g.getClipX();
y = g.getClipY();
w = g.getClipWidth();
h = g.getClipHeight();
switch (anthor) {
case FontStyle.LEFTTOP:
break;
case FontStyle.LEFTBOTTOM:
clipy-=cliph;
break;
case FontStyle.RIGHTTOP:
clipx-=clipw;
break;
case FontStyle.RIGHTBOTTOM:
clipx-=clipw;
clipy-=cliph;
break;
case FontStyle.HCENTERTOP:
clipx-=(clipw/2);
break;
case FontStyle.HCENTERBOTTOM:
clipx-=(clipw/2);
clipy-=clipw;
break;
}
g.setClip(clipx, clipy, clipw, cliph);
g.drawImage(image, clipx - offx, clipy - offy, 0);
g.setClip(x, y, w, h);
}