BlackBerry BitmapField на изменение фокуса и нажмите слушателя - PullRequest
0 голосов
/ 18 октября 2010

Я хочу изменить изображение BitmapField onFocus и onUnfocus, и мне нужно событие onClick для него.Как я могу это сделать?Вот мой код, но он запускает событие по изменению фокуса.

public class ClickbleImage extends BitmapField {
    public ClickbleImage(Bitmap bitmap,long style) {
        super(bitmap,style);
    }

    public boolean isFocusable() {
        return true;
    }

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

    protected void onFocus(int direction) {
       this.setBitmap(Bitmap.getBitmapResource("img/editfocus.jpg"));
       super.onFocus(direction);
    }

    protected void onUnfocus() {
       this.setBitmap(Bitmap.getBitmapResource("img/edit.png"));
       super.onUnfocus();
    }
}

Ответы [ 2 ]

1 голос
/ 18 октября 2010

Я не совсем уверен, что вы подразумеваете под «это событие запускает изменение фокуса». Разве это не то, что вы хотите?

В прошлом месяце я работал над пользовательской кнопкой «Растровое изображение», и в итоге я создал подкласс Field и сам обработал рисунок. Я не помню, почему подкласс BitmapField не работал, но вы можете посмотреть на это. У вас было бы немного больше контроля.

Кроме того, вам необходимо добавить вызовы к invalidate() в ваших onFocus и onUnFocus методах, потому что это приведет к тому, что поле будет перекрашено с использованием нового растрового изображения. Наконец, подумайте о переопределении drawFocus() и ничего не делайте внутри этого метода, потому что это предотвратит рисование стандартного стиля фокуса (синий ореол). Если вы этого не хотите, но если у вас есть собственное фокусное изображение, это может быть нежелательно.

Если вы опубликуете более подробную информацию о проблеме, я могу попытаться помочь, но я не уверен, в чем проблема.

Отредактировано, чтобы добавить:

Я посмотрел свои заметки и нашел эту ссылку,

http://www.thinkingblackberry.com/archives/167

и, на второй взгляд, в каталоге samples \ com \ rim \ samples \ device \ устройства BB JDE 5.0 есть настраиваемая кнопка demo. Он реализует в основном именно то, что описывает этот пост в блоге, это может быть полезно. В этом сообщении в блоге описывается рисование пользовательской кнопки, а не использование растрового изображения, но это та же идея. В методе paint(Graphics g) вы бы сделали

protected void paint(Graphics g) {
    g.drawBitmap(0,0,getWidth(),getHeight(),bmp,0,0);
}

Примеры RIM включают PictureBackgroundButtonField, который реализует кнопку Bitmap. Это то, что я использовал и имеет больше деталей, чем то, что я написал выше.

0 голосов
/ 19 апреля 2012
 public static Field setImages(final Bitmap bitmap1 , final Bitmap bitmap2 ){

    Field temp = new Field(Field.FOCUSABLE) {

        protected void paint(Graphics graphics) {
            if(isFocus())
            {
                graphics.drawBitmap(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), bitmap2, 0, 0);
            }
            else
            {
                graphics.drawBitmap(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), bitmap1, 0, 0);
            }

        }

        protected void layout(int width, int height) {
            setExtent(bitmap1.getWidth(), bitmap1.getHeight());

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

        } 
        protected void onFocus(int direction)
        {
            super.onFocus(direction);
            invalidate();
        }
        protected void onUnfocus() {
            super.onUnfocus();
            invalidate();
        }
        public boolean isFocusable() 
        {
            return true;
        }
        protected boolean navigationClick(int status, int time) 
        {
            fieldChangeNotify(1);
            return true;
        }

    };
    return temp;

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