Как выделить сфокусированное пользовательское поле кнопок (ImageButtonField) на Blackberry? - PullRequest
1 голос
/ 13 февраля 2012

Я создал собственный класс ButtonField, где у меня есть изображение в качестве кнопки.Тем не менее, я хотел бы иметь возможность выбрать это изображение и знать, что оно выбрано, либо частично выделив его, либо поместив вокруг него квадрат, что угодно.У меня есть BitmapField в моем пользовательском интерфейсе, который выделяет себя синим цветом, когда я выбираю его, но другие мои изображения, которые используют ImageButtonField, не имеют синего выделения.Я не хочу, чтобы растровое изображение полностью исчезало при выборе.

вот код:

package mypackage;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Characters;
import net.rim.device.api.ui.component.BitmapField;

    public class ImageButtonField extends BitmapField{

    public ImageButtonField(Bitmap image) {
        super(image);
    }

    public boolean isFocusable() {
        return true;
    }

    protected boolean navigationClick(int status, int time) {
        fieldChangeNotify(0);
        return true;
    }

    protected boolean trackwheelClick(int status, int time) {
        fieldChangeNotify(0);
        return true;
    }

    protected boolean keyChar(char character, int status, int time) {
        if(Characters.ENTER == character || Characters.SPACE == character) {
            fieldChangeNotify(0);
            return true;
        }
        return super.keyChar(character, status, time);
    }
}

Любая помощь, изменяющая этот класс, чтобы он работал, очень бы помогла.Я безуспешно пытался сделать эту работу!

1 Ответ

4 голосов
/ 14 февраля 2012

Чтобы удалить атрибуты стиля по умолчанию, вы можете добавить следующие методы:

protected void applyTheme(Graphics arg0, boolean arg1) {
}

protected void drawFocus(Graphics graphics, boolean on) {
}

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

protected void paint(Graphics graphics) {
    super.paint(graphics);
    if (isFocus()) {
        graphics.setGlobalAlpha(128);
        graphics.setColor(0xFF0000);
        graphics.fillRect(0, 0, getWidth(), getHeight());
    }
}

На самом деле я не очень хорошо понял ваш вопрос:).

...