我正在编写一个使用自定义标题栏的BlackBerry应用程序。我的应用程序使用图像,而不是使用基于文本的标题栏。
一旦设备的方向(如BlackBerry Storm或Torch)从纵向更改为横向,我无法重新绘制此标题栏。请参阅下面我的titleBar类的代码。
任何帮助将不胜感激!谢谢!
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
/**
* Title Bar
*/
public class TitleBar extends Field implements DrawStyle
{
private int fieldWidth;
private int fieldHeight;
private int fontColour;
private int backgroundColor;
private Bitmap bgImage = Bitmap.getBitmapResource("bgtitle.png");
private Bitmap titleImage = Bitmap.getBitmapResource("logotitle.png");
private static final int BACKGROUND_COLOR = 0x00000000;
public TitleBar()
{
super(Field.NON_FOCUSABLE);
fieldHeight = titleImage.getHeight();
fieldWidth = Display.getWidth();
//background color is black
backgroundColor = BACKGROUND_COLOR;
}
public void setBackgroundColour(int _backgroundColour)
{
backgroundColor = _backgroundColour;
invalidate();
}
protected void layout(int width, int height)
{
setExtent(getPreferredWidth(), getPreferredHeight());
}
public int getPreferredWidth()
{
return fieldWidth;
}
public int getPreferredHeight()
{
return fieldHeight;
}
protected void paint(Graphics graphics)
{
int w = this.getPreferredWidth();
int h = this.getPreferredHeight();
int width_of_bg = 10;
int paint_position = 0;
int screen_width = Display.getWidth();
while(paint_position<screen_width){
graphics.drawBitmap(paint_position, 0, w, h, bgImage, 0, 0);
paint_position += width_of_bg;
}
int marginX = (w- titleImage.getWidth() ) / 2 ;
graphics.drawBitmap(marginX, 0, w, h, titleImage, 0, 0);
}
}
答案 0 :(得分:1)
解决了!
这是因为我在构造函数中获得了宽度。当设备重新定向时,我将检索在构造函数中获取的保存值。
这是固定代码:
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
/**
* Title Bar
*/
public class TitleBar extends Field implements DrawStyle
{
private int fieldWidth;
private int fieldHeight;
private int fontColour;
private int backgroundColor;
private Bitmap bgImage = Bitmap.getBitmapResource("bgtitle.png");
private Bitmap titleImage = Bitmap.getBitmapResource("logotitle.png");
private static final int BACKGROUND_COLOR = 0x00000000;
public TitleBar()
{
super(Field.NON_FOCUSABLE);
fieldHeight = titleImage.getHeight();
fieldWidth = Display.getWidth();
//background color is black
backgroundColor = BACKGROUND_COLOR;
}
public void setBackgroundColour(int _backgroundColour)
{
backgroundColor = _backgroundColour;
invalidate();
}
protected void layout(int width, int height)
{
setExtent(getPreferredWidth(), getPreferredHeight());
}
public int getPreferredWidth()
{
return Display.getWidth();
}
public int getPreferredHeight()
{
return fieldHeight;
}
protected void paint(Graphics graphics)
{
int w = this.getPreferredWidth();
int h = this.getPreferredHeight();
int width_of_bg = 10;
int paint_position = 0;
while(paint_position<w){
graphics.drawBitmap(paint_position, 0, w, h, bgImage, 0, 0);
paint_position += width_of_bg;
}
int marginX = (w- titleImage.getWidth() ) / 2 ;
graphics.drawBitmap(marginX, 0, w, h, titleImage, 0, 0);
}
}