1

我有一个完全可以使用的自定义位图按钮字段,但是,图像后面的背景显示为一个白色矩形。我发现它在哪里使颜色变白,但我不知道如何使它完全透明。有任何想法吗?我正在用黑莓 java JDE 5.0 编程

仅供参考 按钮图像是圆角 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;
    }
}
4

3 回答 3

0

确保您的 paint() 方法使用 drawARGB 在屏幕上绘制位图。我有一个类似的问题,“Scale a Bitmap and preserve alpha, on BlackBerry”,结果 drawRGB 和 drawBitmap 不使用 alpha 通道,所以不会留下任何透明的东西。

于 2012-04-23T00:41:36.970 回答
0

你正在使用

graph.setColor(Color.WHITE);

 graph.fillRect(0, 0, getWidth(), getHeight());

代码中的方法(在paint() 和paintBackground() 方法中)将创建一个白色矩形。

我认为您需要删除此代码。

如果您仍然找不到问题,那么我将提供另一个自定义 BitmapField 示例。

于 2012-04-23T07:31:37.670 回答
0

你已经实施

protected void drawFocus(Graphics g, boolean on)

protected void paintBackground(Graphics g)

并且您还指定了聚焦状态的背景图像。您可以删除 和 的paintBackground()实现drawFocus()。也可以从方法paint中删除将图形颜色设置为白色并填充矩形的线。那就是你只需要在paint方法上绘制位图图像。我在这里修改了你的代码,你可以检查一下(我没有测试过)。

于 2012-04-23T23:00:54.497 回答