0

カスタムListFieldCallbackを使用してBlackBerryアプリケーションのListFieldを実装しました。2つの問題を除いて、うまく機能しています。

まず、指定したビットマップは最初の行にのみ描画されます。次の行には描画されていません(ただし、テキストは正常に描画されます)。

次に、現在選択されているListField要素の周囲に青い境界線を描画します。これを行うために、ListFieldのdrawFocus()をオーバーライドして何も含まないようにし、navigationMovement()メソッドでListFieldをinvalidate()に設定しました。境界線は最初の行に描画されていますが、他の行には描画されていません。誰かがその理由を理解できますか?これが私の関連コードです:

ListFieldのインスタンス化:

ListField lf = new ListField() {
            protected void drawFocus(Graphics graphics, boolean on) {
            }

            protected boolean navigationMovement(int dx, int dy,
                    int status, int time) {
                this.invalidate(this.getSelectedIndex());
                return super.navigationMovement(dx, dy, status, time);
            }
            protected boolean navigationClick(int status, int time) {
                return true;
            }
        };

        lf.setEmptyString("No items.", DrawStyle.HCENTER);
        _callback = new ListCallback(vector, Bitmap
                .getBitmapResource("image.png"));
        lf.setCallback(_callback);
        add(lf);

        lf.setSize(vector.size());

カスタムListFieldコールバック:

if (index == list.getSelectedIndex()) {
        g.setColor(0x4096cc);
        g.drawBitmap(5, (bitmapHeight - fontHeight) * 2,
                _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0);
        g.drawText(text, _bitmap.getWidth() + 15,
                y, 0, w);
         g.drawRect(0, 0, list.getWidth(), list.getRowHeight());
    } else {
        g.setColor(0x4096cc);
        g.drawBitmap(5, (bitmapHeight - fontHeight) * 2,
                _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0);
        g.drawText(text, _bitmap.getWidth() + 15,
                y, 0, w);
    }

ありがとう!

4

1 に答える 1

1

すべてのコードがないと正確に判断するのは難しいですが、drawText呼び出しはy値を使用しますが、他の呼び出しは使用しません。そのため、すべてが同じ場所に描画されているのはそのためです。

于 2011-01-31T17:32:40.727 に答える