Как нарисовать сплошной квадрат в BlackBerry? - PullRequest
1 голос
/ 29 марта 2012

Я делаю приложение для BlackBerry OS 6+, и мне нужно нарисовать сплошной квадрат определенного цвета (заданный во время выполнения) , но он должен быть добавлен к VerticalFieldManager. Поэтому я думаю, пользовательское рисование с использованием объекта Graphics не вариант.

Я уже пытался установить цвет фона LabelField на нужный мне цвет и добавить LabelField к VerticalFieldManager. Чтобы получить квадратную форму, я попытался переопределить getPreferredWidth() и getPreferredHeight для LabelField, чтобы получить более высокое значение (например, 150). Но хотя ширина отображалась правильно, высота оставалась неизменной независимо от того, какое значение я вернул.

Так есть ли способ, которым я могу этого достичь? Таким образом, я хочу:

  • Сплошной квадратный блок цвета (цвет определяется во время выполнения).
  • Что следует добавить к VerticalFieldManager.

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

попробуйте этот код, передайте цвет в конструкторе.

import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;

public class CustomField extends Field
{

private int backgroundColour; 
private int fieldWidth;
private int fieldHeight; 
private int padding = 8;

public CustomField(int color)
{
    super(Field.FOCUSABLE); 
    fieldHeight = 100;
    fieldWidth = 100;
    this.setPadding(2, 2, 2, 2);
    this.backgroundColour=color;
} 

public int getPreferredWidth()
{
    return fieldWidth;
}

public int getPreferredHeight()
{
    return fieldHeight;
}

protected void layout(int arg0, int arg1)
{
    setExtent(getPreferredWidth(), getPreferredHeight());
}

protected void drawFocus(Graphics graphics, boolean on)
{

} 

protected void paint(Graphics graphics)
{
    graphics.setColor(backgroundColour);
    graphics.fillRect(0, 0, fieldWidth, fieldHeight); 
}
}
0 голосов
/ 12 апреля 2012
VerticalFieldManager vfm = new VerticalFieldManager();

    Field f = new Field() {

        protected void paint(Graphics graphics) {
            graphics.setBackgroundColor(Color.RED);
            graphics.clear();
            graphics.drawRect(10, 10, 100, 100);
            graphics.fillRect(10, 10, 100, 100);
        }

        protected void layout(int width, int height) {
            // TODO Auto-generated method stub

            setExtent(200, 200);
        }
    };
    vfm.add(f);

    add(vfm);
...