Граница рисования в BlackBerry ListField

Я реализовал ListField для своего приложения BlackBerry с настраиваемым ListFieldCallback. Работает хорошо, за исключением двух проблем:

Во-первых, мое указанное растровое изображение рисуется только в первой строке. Он не отображается ни в одной следующей строке (однако текст отображается нормально).

Во-вторых, я хочу нарисовать синюю рамку вокруг текущего выбранного элемента ListField. Для этого я переопределил drawFocus () ListField, чтобы он ничего не содержал, а также установил для ListField значение invalidate () в методе navigationMovement (). Граница рисуется в первом ряду, но не в других. Кто-нибудь может понять, почему? Вот мой соответствующий код:

Создание экземпляра 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);
    }

Спасибо!


person littleK    schedule 31.01.2011    source источник


Ответы (1)


Трудно сказать точно без всего кода, но ваш вызов drawText использует значение y, а другие вызовы - нет, поэтому это объясняет, почему все они рисуются в одном месте.

person Eric Giguere    schedule 31.01.2011
comment
Вы правы, исправление моих drawBitmap () и drawRect () для использования y помогло. Спасибо! - person littleK; 31.01.2011