Как выделить сфокусированное пользовательское поле кнопок (ImageButtonField) на Blackberry?
Я создал собственный класс 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 ответ
Чтобы удалить атрибуты стиля по умолчанию, вы можете добавить следующие методы:
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());
}
}
На самом деле я не очень хорошо понял ваш вопрос:).