如何在黑莓中制作UI,包括图像,使其在不同的屏幕分辨率设备中工作?

时间:2011-11-17 09:54:15

标签: blackberry

我正在开发一个可在不同黑莓设备上运行的应用程序。

640 x 480
800 x 480
360 X 480
320 X 240
480 X 360

请告诉我如何处理这些决议。 我使用了Differnt PicturebackgroundField,EditFields等

4 个答案:

答案 0 :(得分:6)

在Blackberry中没有单一的方法来处理不同的分辨率。您可以使用以下方式:

CASE 1。调整图像大小和缩放以获得不同的分辨率。

CASE 2。通过为每个目标分辨率包含图像来创建单个构建。

CASE 3。通过替换图像,创建单个源代码并为不同的分辨率构建不同的cod文件。

利弊:

案例1:这种方式提供的质量很差。 PNG图像缩放不能提供良好的结果。

案例2:这种方式适用于使用较少图片的小型项目。

CASE 3:通过这种方式,您可以根据屏幕高度和宽度实现布局代码,然后通过替换不同分辨率的图像来构建应用程序。我认为这就是Blackberry为不同分辨率上传不同COD的工具的原因。

答案 1 :(得分:0)

您可以使用

根据屏幕要求调整图片大小或缩放
BitMap_Instance.scaleInto(0, 0, image.getWidth(), image.getHeight(), ret, 0, 0, 
desiredWidth, desiredHeight, Bitmap.FILTER_BILINEAR);

答案 2 :(得分:0)

取设备宽度&根据你可以操纵的高度:

 int width=Display.getWidth();
 int height=Display.getHeight();

从这些宽度和高度,你可以CROP和SCALE图像。

答案 3 :(得分:0)

有两种方法,有利有弊:

<强> 1。在应用启动时调整图片大小

仅包含应用资源中最大分辨率的图像,然后根据设备屏幕分辨率缩小它们。这种方法有两个问题:1。执行图像大小调整可能需要一些时间,这可能会影响您的启动时间2. BlackBerry调整大小功能不是很好,可能会创建像素化的图像。如果你想这样做,这里有一些代码:

public class DisplayConfig {

    public static EncodedImage scaleImageToHeight(EncodedImage encoded, float newHeight) {
        return scaleToFactor(encoded, encoded.getHeight(), (int)newHeight);
    }

    public static EncodedImage scaleToFactor(EncodedImage encoded, int curSize, int newSize) {
        int numerator = Fixed32.toFP(curSize);
        int denominator = Fixed32.toFP(newSize);
        int scale = Fixed32.div(numerator, denominator);

        return encoded.scaleImage32(scale, scale);
    }
}

用法示例:

EncodedImage titleLogoEnc = EncodedImage.getEncodedImageResource("title-background-logo.png");

if (currentDisplayFormat == SCREEN_FORMAT_320_BY_240){

    float scaleFactor = 2F/3; //0.6 recurring
    titleLogoEnc = DisplayConfig.scaleImageToHeight(titleLogoEnc, titleLogoEnc.getHeight() * scaleFactor);  
}

<强> 2。包含每个目标分辨率的图像

如果您的图像很小,从文件大小开始开始,这样做很少,图像质量要好得多。在App World上下载的实际限制大约是5MB,因此您需要判断每个支持的分辨率的图像是否会使您生成的应用程序过大。