我正在开发一个应用程序,将运行在不同的黑莓设备。
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);