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!