如何使黑莓用户界面包括图像在这样一种方式,它的工作在不同的屏幕分辨率的设备



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

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

请告诉我如何处理这些分辨率。我使用了differturebackgroundfield, EditFields等

没有单一的方法来处理黑莓不同的分辨率。你可以这样使用:

1。为不同的分辨率调整和缩放图像。

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

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

利弊对比:

CASE 1:这种方式提供的质量较差。PNG图像缩放不提供良好的结果。

案例2:这种方式对于使用较少图像的小项目很好。

CASE 3:通过这种方式,您可以根据屏幕高度和宽度实现布局代码,然后通过替换不同分辨率的图像来构建应用程序。我认为这就是为什么黑莓提供了上传不同分辨率的不同COD的功能。

取设备宽度&高度和根据你可以操作:

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

从这些宽度和高度,你可以裁剪和缩放图像

有两种方法,各有利弊:

1。应用启动时调整图片大小

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

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左右,所以由你来判断每种支持分辨率的图像是否会使你的应用程序太大。

您可以使用根据您的屏幕要求调整或缩放图像

BitMap_Instance.scaleInto(0, 0, image.getWidth(), image.getHeight(), ret, 0, 0, 
desiredWidth, desiredHeight, Bitmap.FILTER_BILINEAR);

最新更新