Обработка разных разрешений экрана в Blackberry с одним изображением
У меня есть одно изображение PNG, и я применяю его ко всем экранам в качестве фона. Его разрешение 360х480, потому что я начал программировать для симулятора 9800. Я разрабатываю для ОС 6.0. Когда я тестирую свое приложение для симулятора 9700 с разрешением экрана 480x360, изображение покрывает только половину экрана. Я исследовал и узнал об использовании Fixed32 и масштабирования, и я применил его также. Но все же фон, кажется, вызывает проблему. У меня есть только одно изображение в папке ресурсов. Как обработать это одно изображение, чтобы оно подходило для всех устройств Blackberry?
2 ответа
Вы должны изменить размер изображения в зависимости от ширины и высоты экрана, чтобы соответствовать экрану, на котором вы работаете.
Для этого будут использованы следующие методы.
public static EncodedImage sizeImage(EncodedImage image, int width,
int height) {
EncodedImage result = null;
int currentWidthFixed32 = Fixed32.toFP(image.getWidth());
int currentHeightFixed32 = Fixed32.toFP(image.getHeight());
int requiredWidthFixed32 = Fixed32.toFP(width);
int requiredHeightFixed32 = Fixed32.toFP(height);
int scaleXFixed32 = Fixed32.div(currentWidthFixed32,
requiredWidthFixed32);
int scaleYFixed32 = Fixed32.div(currentHeightFixed32,
requiredHeightFixed32);
result = image.scaleImage32(scaleXFixed32, scaleYFixed32);
return result;
}
После изменения размера используйте нижеприведенный метод обрезки.
public static Bitmap cropBitmap(Bitmap original, int width, int height) {
Bitmap bmp = new Bitmap(width, height);
int x = (original.getWidth() / 2) - (width / 2); // Center the new size by width
int y = (original.getHeight() / 2) - (height / 2); // Center the new size by height
int[] argb = new int[width * height];
original.getARGB(argb, 0, width, x, y, width, height);
bmp.setARGB(argb, 0, width, 0, 0, width, height);
return bmp;
Создайте растровое изображение следующим образом.
EncodedImage eImage = EncodedImage.getEncodedImageResource("img/new.png" );
EncodedImage bitimage=sizeImage(eImage,Display.getWidth(),Display.getHeight());
Bitmap image=cropBitmap(bitimage.getBitmap(),Display.getWidth(),Display.getHeight());
Передайте выше растровое изображение вашему менеджеру.
Теперь установите возвращаемое растровое изображение в качестве фона для экрана. Это сработало для меня. Надеюсь, это поможет вам.
Чтобы установить изображение с необходимой шириной и высотой, используйте растровое масштабирование; А если вы хотите поместить свое изображение в качестве фона, поместите растровое изображение в VerticalFieldManager следующим образом: Для всех устройств это работает:
Bitmap bit=Bitmap.getBitmapResource("background.png");
Bitmap scalingBitmap=new Bitmap(Device.getWidth(),Device.getHeight()); //here you can give any size.Then it sets the image according to your required width and height;
bit.scaleInto(scalingBitmap, Bitmap.FILTER_LANCZOS); //This is important;
VerticalFieldManager mainVertical=new VerticalFieldManager()
{
//Here Device.getWidth() and Device.getHeight(); These two are your Blackberry Device width and height;(According your 9800 it takes 480x360)
protected void paint(Graphics g)
{
g.clear();
g.drawBitmap(0, 0, Device.getWidth(),Device.getHeight(), scalingBitmap, 0, 0);
super.paint(g);
}
protected void sublayout(int maxWidth, int maxHeight)
{
super.sublayout(Device.getWidth(),Device.getHeight());
setExtent(Device.getWidth(),Device.getHeight());
}
};
add(mainVertical);
Достаточно.