BlackBerry - ButtonField с центрированным растровым изображением - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть класс, который расширяется от ButtonField:

class BitmapButtonField extends ButtonField
{
    private Bitmap _bitmap;
    private int _buttonWidth;
    private int _buttonHeight;

    BitmapButtonField(Bitmap bitmap, int buttonWidth, int buttonHeight, long style) 
    {    
        super(style);
        _buttonWidth = buttonWidth;
        _buttonHeight = buttonHeight;
        _bitmap = bitmap;
    }

    public int getPreferredHeight() 
    {
        return _buttonHeight;
    }

    public int getPreferredWidth() 
    {
        return _buttonWidth;
    }

    protected void layout(int width, int height) 
    {
        setExtent(Math.min( width, getPreferredWidth()), Math.min( height, getPreferredHeight()));
    }

    protected void paint(Graphics graphics) 
    {       
        // THIS IS NOT CENTERED
        int x = (getPreferredWidth() - _bitmap.getWidth()) >> 1;
        graphics.drawBitmap(x, 0, _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0);

        // THIS IS NOT LEFTMOST, TOPMOST
        graphics.drawBitmap(0, 0, _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0);
    }
} 

Если вы могли видеть из моих комментариев о методе рисования, ясно, что позиция ButtonField 0,0 находится не совсем в самом левом и верхнем углу кнопки, так или иначе, она дополняется неизвестным смещением, поэтому это затрудняет центрирование изображения. .

Но если я расширяюсь из класса Field, проблема исчезает, но мне нужно продолжать расширяться от ButtonField, так как мне нужны рамка и стиль фокусировки ButtonField (сине-белый прямоугольник с закругленными углами), мне просто нужно отобразить центрированное изображение ButtonField, сохраняя все стандартные атрибуты ButtonField.

Есть ли способ устранить смещение в методе рисования на ButtonField? Я пробовал setPadding и setMargin, но не повезло. Большое спасибо!

1 Ответ

0 голосов
/ 12 ноября 2009

В paint () для определения смещения x для изображения есть код:

int x = (getPreferredWidth() - _bitmap.getWidth()) >> 1;

Ничего, кнопка может быть другого размера, из-за:

protected void layout(int width, int height) 
{
    setExtent(Math.min( width, getPreferredWidth()), 
       Math.min( height, getPreferredHeight()));
}

Попробуйте использовать

protected void layout(int width, int height) 
{
    setExtent(getPreferredWidth(), getPreferredHeight());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...