我有一个完全有效的自定义位图按钮字段,但是,图像背后的背景显示了一个白色矩形。我发现它使颜色变白了,但我无法弄清楚如何使它完全透明。有任何想法吗?我正在用黑莓java JDE 5.0编程
FYI按钮图像是一个使用角落透明度的圆角png文件
代码:
public class BitmapButtonField extends Field
{
Bitmap _currentPicture;
private Bitmap _onPicture;
Bitmap _offPicture;
private int id;
public BitmapButtonField (Bitmap onImage, Bitmap offImage)
{
super(Field.FOCUSABLE|Field.FIELD_HCENTER);
_offPicture = offImage;
_onPicture = onImage;
_currentPicture = _onPicture;
}
public void setButtonImage (Bitmap onImage, Bitmap offImage)
{
_offPicture = offImage;
_onPicture = onImage;
_currentPicture = _onPicture;
}
public void setButtonId(int id)
{
this.id = id;
}
public int getButtonId()
{
return this.id;
}
public int getPreferredHeight()
{
return _onPicture.getHeight();
}
public int getPreferredWidth()
{
return _onPicture.getWidth();
}
protected void onFocus(int direction)
{
_currentPicture = _offPicture;
invalidate();
}
protected void onUnfocus()
{
_currentPicture = _onPicture;
invalidate();
}
protected void drawFocus(Graphics g, boolean on)
{
g.setBackgroundColor(Color.BLACK);
}
protected void layout(int width, int height)
{
setExtent(Math.min( width, getPreferredWidth()), Math.min(
height, getPreferredHeight()));
}
protected void paintBackground(Graphics g) {
int prevColor = g.getColor();
int prevAlpha = g.getGlobalAlpha();
g.setColor(Color.YELLOW);
g.setGlobalAlpha(0);
g.fillRect(0, 0, getWidth(), getHeight()); // or g.getClippingRect()
g.setColor(prevColor);
g.setGlobalAlpha(prevAlpha);
}
protected void paint (Graphics graph){
graph.setColor(Color.WHITE);
//super.paint(graph);
graph.fillRect(0, 0, getWidth(), getHeight());
graph.drawBitmap(0, 0, getWidth(), getHeight(),
_currentPicture, 0, 0);
}
protected boolean navigationClick(int status, int time)
{
fieldChangeNotify(0);
return true;
}
public boolean keyChar(char key, int status, int time)
{
if (key == Characters.ENTER)
{
fieldChangeNotify(0);
return true;
}
return false;
}
}
答案 0 :(得分:0)
确保paint()方法使用drawARGB在屏幕上绘制位图。我有一个类似的问题,"Scale a Bitmap and preserve alpha, on BlackBerry",结果是drawRGB和drawBitmap没有使用alpha通道,所以不会留下任何透明的东西。
答案 1 :(得分:0)
你正在使用
graph.setColor(Color.WHITE);
graph.fillRect(0, 0, getWidth(), getHeight());
代码中的方法(在paint()和paintBackground()方法中)将创建一个白色矩形。
我认为您需要删除此代码。
如果您仍然无法找到问题,那么我将提供另一个自定义BitmapField示例。
答案 2 :(得分:0)
您已实施
protected void drawFocus(Graphics g, boolean on)
和
protected void paintBackground(Graphics g)
并且您还指定了聚焦状态的背景图像。您可以删除paintBackground()
和drawFocus()
的实施。此外,可以从方法绘制中删除将图形颜色设置为白色并填充矩形的线。那就是你只需要在paint方法上绘制位图图像。我修改了你的代码here,你可以检查一下(我没有测试它)。