BlackBerry 6: создание белого прямоугольного изображения с текстом и градиентом - PullRequest
2 голосов
/ 14 марта 2011

Я пытаюсь создать пользовательский компонент, похожий на прямоугольный переключатель:

enter image description here

В качестве основы я беру пользовательский ScrollableImageField.java *Компонент 1007 * и передача ему изображения из ресурсов проекта на моем экране:

_dial = new FMRadioDial(EncodedImage.getEncodedImageResource("big_dial.png"));
_dial = new FMRadioDial(bmp);
add(_dial);

Это хорошо работает, и я могу прокрутить изображение с помощью оптической сенсорной панели, а также проведя пальцем по экрану факела.1012 * Затем я пытаюсь сгенерировать изображение белого прямоугольника самостоятельно:

Bitmap bmp = new Bitmap(Display.getWidth()*4, Display.getHeight()/2);
_dial = new FMRadioDial(bmp);
add(_dial);

это компилируется, но я получаю черное изображение.

Итак, мой вопрос: как сгенерировать изображение(я должен использовать Bitmap или, может быть, EncodedImage здесь?) из кода и как я могу нарисовать в нем белый прямоугольник, градиент и какой-нибудь текст?

Спасибо!Alex

1 Ответ

1 голос
/ 15 марта 2011

Привет, ты можешь сделать что-то вроде этого:

int bmpWidth = 100;
    int bmpHeight = 100;        
    Bitmap bmp = new Bitmap(bmpWidth,bmpHeight);
    Graphics g = new Graphics(bmp);
    int[] X_PTS = { 0, 0, bmpWidth, bmpWidth };
    int[] Y_PTS = { 0, bmpHeight, bmpHeight, 0 };
    int[] drawColors = {0x646464, 0xffffff, 0xffffff, 0x646464 };           
    g.drawShadedFilledPath(X_PTS, Y_PTS, null, drawColors, null);        
    g.setColor(0x0000ff);
    g.drawText("TEXT", 50, 50);

Но если вы хотите просто отобразить его, вам не нужно создавать растровое изображение, Вы можете расширить поле и переопределить метод рисования:

public class CustomField extends Field {    

private int myWidth = 200;
private int myHeight = 100;

public int getPreferredWidth() {
    return myWidth;
}

public int getPreferredHeight() {
    return myHeight;
}

protected void layout(int width, int height) {              
    setExtent(myWidth, myHeight);
}

protected void paint(Graphics g) {
    int[] X_PTS = { 0, 0, myWidth, myWidth };
    int[] Y_PTS = { 0, myHeight, myHeight, 0 };
    int[] drawColors = {0x646464, 0xffffff, 0xffffff, 0x646464 };           
    g.drawShadedFilledPath(X_PTS, Y_PTS, null, drawColors, null);        
    g.setColor(0x0000ff);
    g.drawText("TEXT", 50, 50); }

}

...