BlackBerry - ButtonField z wyśrodkowaną mapą bitową

Mam klasę, która rozciąga się od 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);
    }
} 

Jeśli widzieliście z moich komentarzy na temat metody malowania, wyraźnie pozycja 0,0 ButtonField nie jest dokładnie w lewym i najwyższym rogu przycisku, w jakiś sposób jest wypełniona nieznanym przesunięciem, co sprawia, że ​​centrowanie obrazu jest trudne.

Ale jeśli rozciągnę się z klasy Field, problem zniknie, ale muszę nadal rozszerzać z ButtonField, ponieważ potrzebuję granicy ButtonField i stylu ostrości (niebiesko-biały zaokrąglony prostokąt), muszę tylko wyświetlić wyśrodkowany obraz na ButtonField, i nadal zachowuje wszystkie standardowe atrybuty ButtonField.

Czy istnieje sposób na wyeliminowanie wyściełanego przesunięcia w metodzie malowania na ButtonField? Próbowałem setPadding i setMargin, ale nie miałem takiego szczęścia. Wielkie dzięki!

questionAnswers(1)

yourAnswerToTheQuestion