2

I created a static function like this.

public static Bitmap Bitmap(String path) {
    Bitmap bitmap = Bitmap
            .getBitmapResource(Display.getWidth() + "/" + path);
    System.out.println(Display.getWidth() + "" + path);
    return bitmap;
}

However, when I called like this,

private Bitmap download = Config_GlobalFunction.Bitmap("btn_download.png");

The output gave me FRIDG could not find 320/btn_download.png.

In my res folder, I got an folder which was img and inside img got 6 different folders which were 160, 240, 320, 360, 480 and 640 folder.

How can I call correct folder's image based on Display.getWidth()?

4

3 回答 3

5

文件夹下可能有文件夹层次结构,但/res您必须使用getClass().getResourceAsStream(path)而不是Bitmap.getBitmapResource()为了创建资源。

此示例从路径创建位图/res/img/hi_res/ui/action_arrow.png

String imagePath = "/img/hi_res/ui/action_arrow.png"; 
InputStream is = getClass().getResourceAsStream(imagePath);
byte[] imageBytes = IOUtilities.streamToBytes(is);
Bitmap b = Bitmap.createBitmapFromBytes(imageBytes, 0, imageBytes.length, 1);

这需要更多的工作,但这确实意味着您可以拥有一个不错的文件夹结构,而不是将数百张图像集中在一个文件夹中。

于 2012-07-18T22:13:26.950 回答
2

我以前遇到过这个问题。 黑莓应用程序似乎没有很好地设置来处理子文件夹中的资源文件。 也就是说,您可以将资源存储在文件夹中,但是当捆绑到您的应用程序(.cod 文件)中时,它们基本上都会被转储到同一个文件夹中。

如您所见,如果您有多个具有相同名称的资源(但在不同的文件夹中),则会导致问题。

我曾经使用 Netbeans IDE 来构建 BlackBerry 应用程序,而使用 Netbeans BlackBerry 插件,它似乎可以处理这个问题。但是,对于 RIM JDE 或 Eclipse 插件,它不会。也许这是ant工具集背后的构建脚本中的东西?

无论如何,我知道你想做一些类似于 Android 的事情,你会有:

  • res/drawable-hdpi/icon.png
  • res/drawable-mdpi/icon.png
  • res/drawable-xhdpi/icon.png

并根据屏幕尺寸/分辨率选择正确版本的 icon.png。这是个好主意。

但是,为简单起见,我可能会建议您将系统更改为仅在资源名称上使用前缀,而不是文件夹。我知道这很痛苦,但黑莓似乎处理得更好。

因此,只需调用您的图像:

  • res/img/320_btn_download.png
  • res/img/360_btn_download.png
  • res/img/480_btn_download.png

然后你的代码可以是:

public static Bitmap Bitmap(String path) {
    return Bitmap.getBitmapResource(Display.getWidth() + "_" + path);
}
于 2012-07-18T10:45:06.433 回答
1

如果您想根据分辨率获取图像,那么...根据图像的分辨率为图像命名,例如320x240_img1360x480_img1。无需将这些图像放在不同的文件夹中....将这些图像转储到您的 res 文件夹中并像这样调用

int x = Display.getWidth();
int y = Display.getHeight();

String xx = Integer.toString(x);
String yy =Integer.toString(y);
_encImg = EncodedImage.getEncodedImageResource(xx+"x"+yy+".jpg");                                       
于 2012-07-18T11:25:10.550 回答