2011-03-14 47 views
2

我试图创建一个自定义组件看上去像一个矩形打开收音机白色矩形图像:黑莓6:创建文本和梯度

enter image description here

为基地,我走的是定制ScrollableImageField.java组件并通过它从项目资源的图像在我的屏幕上:

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

这工作得很好,我可以通过光学触摸板滚动的图像,也通过刷火炬屏幕。

然后我试图生成一个白色矩形图像自己:

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

这个编译,但我得到一个黑色的图像。

所以我的问题是:如何从代码中生成一个图像(我应该使用位图还是EncodedImage?)以及如何绘制白色矩形,渐变和一些文本?

谢谢! 亚历

回答

1

嗨,你可以做这样的事情:

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); 

但是,如果你想只显示它,你不需要创建位图, 你可以扩展场和重写paint方法:

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); } 

}

+0

真的,我并不需要一个位图,我会在油漆涂料的东西() – 2011-03-15 08:51:09