Blackberry - Listfield с прозрачными рядами - PullRequest
0 голосов
/ 29 июня 2011

У меня есть экран с фоновым изображением, которое выглядит так:

     bg = new VerticalFieldManager(
            VerticalFieldManager.USE_ALL_WIDTH |
            VerticalFieldManager.USE_ALL_HEIGHT |
            VerticalFieldManager.NO_HORIZONTAL_SCROLLBAR |
            VerticalFieldManager.NO_VERTICAL_SCROLLBAR |
            VerticalFieldManager.NO_HORIZONTAL_SCROLL |
            VerticalFieldManager.NO_VERTICAL_SCROLL) {
        //Override the paint method to draw the background image.
        public void paint(Graphics graphics) {
            //Draw the background image and then call paint.
            graphics.drawBitmap(Graphics.getScreenWidth()/2 - bgBitmap.getWidth()/2,
                    Graphics.getScreenHeight()/2 - bgBitmap.getHeight()/2, 
                    bgBitmap.getWidth(), bgBitmap.getHeight(), bgBitmap, 0, 0);
            super.paint(graphics);
        }
    };
    add(bg);

Затем я добавляю любые поля для экрана в этот менеджер. У меня есть ListField, через который я хотел бы видеть фон. Когда экран впервые отображается, все хорошо. Я могу видеть изображение. Как только я прокручиваю вниз, выбираю что-то и отменяю это, фон исчезает (становится белым).

Нужно ли делать что-то особенное при рисовании строк моего списка, чтобы сделать их по-настоящему прозрачными после исчезновения цвета выделения?

ПРИМЕЧАНИЕ. Я обнаружил, что это происходит независимо от того, какое поле отображается поверх фона. Он отображается правильно, пока цвет выделения не будет нарисован для данного фокусируемого поля, а затем вы выберете что-то еще. Вся область, заполненная цветом выделения, после отмены выбора становится белым по умолчанию.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

использовать функцию invalidate () в методах onfocus () и onunfocus ().

Например, если вы используете LabelField, тогда используйте:

LabelField l=new LabelField("Hello",FOCUSABLE)
        {
            protected void onFocus(int direction) 
            {
                invalidate();
                super.onFocus(direction);
            }
            protected void onUnfocus() 
            {
                invalidate();
                super.onUnfocus();
            }
        };
0 голосов
/ 30 июня 2011

В итоге я переопределил moveFocus () в моем собственном ListField.

    public int moveFocus(int amount, int status, int time) {
        invalidate(getSelectedIndex());
        return super.moveFocus(amount, status, time);
    }

Метод Vivek работает хорошо для отдельных полей вне строки ListField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...