我是BlackBerry Development(5.0)的新手。我在Android应用程序开发方面有一点经验。
我要做的是在整个屏幕上填充图像(水平)
类似于在布局文件中使用fill_parent
在Android中可以执行的操作。
我已经在一些论坛上找到了解决方案,但没有得到令人满意的解决方案。
这就是我获取图像的方式
Bitmap headerLogo = Bitmap.getBitmapResource("uperlogo.png");
BitmapField headerLogoField =
new BitmapField(headerLogo, BitmapField.USE_ALL_WIDTH | Field.FIELD_HCENTER);
setTitle(headerLogoField);
此代码在顶部(根据需要)和中心提供了我的标题。我只想让它水平拉伸以覆盖所有空间。
答案 0 :(得分:3)
可以在创建Bitmap
之前水平拉伸BitmapField
,这样就可以解决问题。但是,拉伸Bitmap
并将其用作标题会为支持屏幕旋转的设备(例如Storm,Torch系列)带来问题。在这种情况下,您必须维护两个拉伸的Bitmap
实例,一个用于纵向模式,另一个用于横向模式。此外,您还需要编写一些额外的代码,以根据方向设置适当的Bitmap
。如果您不想这样做,请检查以下两种方法:
使用CustomBitmapField实例
可以使用可以水平拉伸Bitmap
的CustomBitmapField。检查实施情况。
class MyScreen extends MainScreen {
public MyScreen() {
Bitmap bm = Bitmap.getBitmapResource("uperlogo.png");
setTitle(new CustomBitmapField(bm));
}
class CustomBitmapField extends Field {
private Bitmap bmOriginal;
private Bitmap bm;
private int bmHeight;
public CustomBitmapField(Bitmap bm) {
this.bmOriginal = bm;
this.bmHeight = bm.getHeight();
}
protected void layout(int width, int height) {
bm = new Bitmap(width, bmHeight);
bmOriginal.scaleInto(bm, Bitmap.FILTER_BILINEAR);
setExtent(width, bmHeight);
}
protected void paint(Graphics graphics) {
graphics.drawBitmap(0, 0, bm.getWidth(), bmHeight, bm, 0, 0);
}
}
}
使用后台实例
Background
对象可以轻松解决问题。如果Background
实例可以设置为HorizontalFieldManager
,它将使用其可用的所有宽度,那么在屏幕旋转的情况下,它将处理其大小和背景绘制。 Background
实例本身将处理所提供的Bitmap
的拉伸。请检查以下代码。
class MyScreen extends MainScreen {
public MyScreen() {
setTitle(getMyTitle());
}
private Field getMyTitle() {
// Logo.
Bitmap bm = Bitmap.getBitmapResource("uperlogo.png");
// Create a manager that contains only a dummy field that doesn't
// paint anything and has same height as the logo. Background of the
// manager will serve as the title.
HorizontalFieldManager hfm = new HorizontalFieldManager(USE_ALL_WIDTH);
Background bg = BackgroundFactory.createBitmapBackground(bm, Background.POSITION_X_LEFT, Background.POSITION_Y_TOP, Background.REPEAT_SCALE_TO_FIT);
hfm.setBackground(bg);
hfm.add(new DummyField(bm.getHeight()));
return hfm;
}
// Implementation of a dummy field
class DummyField extends Field {
private int logoHeight;
public DummyField(int height) {
logoHeight = height;
}
protected void layout(int width, int height) {
setExtent(1, logoHeight);
}
protected void paint(Graphics graphics) {
}
}
}