2

私はBlackBerryDevelopment(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);

このコードは、(必要に応じて)上部と中央にヘッダーを表示します。これを水平方向に伸ばしてすべてのスペースをカバーしたいだけです。

4

1 に答える 1

3

Bitmapを作成する前に水平方向に伸ばすことが可能でBitmapFieldあり、それで問題が解決します。ただし、ストレッチBitmapしてタイトルとして使用すると、画面の回転をサポートするデバイス(Storm、Torchシリーズなど)で問題が発生します。その場合、2つの引き伸ばされBitmapたインスタンスを維持する必要があります。1つはポートレートモード用で、もう1つはランドスケープモード用です。Bitmapまた、向きに応じて適切に設定するための追加のコードを作成する必要があります。それをしたくない場合は、次の2つのアプローチを確認してください。


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) {
        }
    }
}
于 2012-08-05T20:32:57.580 に答える