我正在使用NetBeans开发一个可以在许多不同设备上运行的J2ME应用程序。该应用程序使用了许多不同的图像资源。由于设备具有不同的屏幕尺寸,这意味着我需要编译多个二进制文件,每个文件具有不同的资产大小。
到目前为止,我一直在使用手动过程来控制资产。我有一个由一堆子目录组成的目录,每个子目录对应于特定类型的设备所需的资产。例如,我有一个目录"320_240",它的资产大小适用于320x240屏幕,另一个目录"480_360",它的资产大小适用于480x360屏幕。文件名与加载它们的代码完全相同。在编译之前,我只是将适当的文件复制到默认包中(在src下)。这显然可以得到改善。我已经有了代表不同屏幕尺寸的不同项目配置,所以我也想让资产自动切换。作为NetBeans的新手,我不确定最好的方法是什么。
哎呀,这是我想到的最好的:
- 创建资产。src下的包,其中LABEL对应于设备类(例如。"320 _240"、"480"_360)
- 将每个类的图像放入相应的src/asset/目录
- 创建一个静态的最终字符串assetDir,根据当前选择的项目配置设置为"/asset//"
- 使用Image加载图像。creatImage(assetDir + "image.png")
- 对于每个配置,在Project->Build->Sources Filtering中只包含必要的资产目录(我认为这是必要的,以避免在编译的应用程序中存储未使用的图像,对吗?)
这仍然感觉有点做作。这是一个普遍的问题。有人有更好的解决方案吗?
谢谢!
如果使用大量图像,则jar文件的大小将会增加。你不能在一些低端设备上安装这个jar。
只使用一个图像,并根据屏幕宽度和屏幕高度调整图像的大小。
要调整图像的大小,使用下面的方法。
public Image resizeImage(Image src, int screenHeight, int screenWidth) {
int srcWidth = src.getWidth();
int srcHeight = src.getHeight();
Image tmp = Image.createImage(screenWidth, srcHeight);
Graphics g = tmp.getGraphics();
int ratio = (srcWidth << 16) / screenWidth;
int pos = ratio / 2;
//Horizontal Resize
for (int index = 0; index < screenWidth; index++) {
g.setClip(index, 0, 1, srcHeight);
g.drawImage(src, index - (pos >> 16), 0);
pos += ratio;
}
Image resizedImage = Image.createImage(screenWidth, screenHeight);
g = resizedImage.getGraphics();
ratio = (srcHeight << 16) / screenHeight;
pos = ratio / 2;
//Vertical resize
for (int index = 0; index < screenHeight; index++) {
g.setClip(0, index, screenWidth, 1);
g.drawImage(tmp, 0, index - (pos >> 16));
pos += ratio;
}
return resizedImage;
}