2012-02-13 1 views
1

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

вот код:

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); 
    } 
} 

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

ответ

4

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

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()); 
    } 
} 

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

+0

СПАСИБО! Боже, мне потребовалось столько времени, чтобы понять это! Ты помог мне больше, чем ты знаешь! : D –

Смежные вопросы