1

我有一个可以呈现白色圆形矩形的 VerticalFieldManager。

这是代码:

 VerticalFieldManager _vfmBackground = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | 
                Manager.NO_VERTICAL_SCROLLBAR | Manager.USE_ALL_WIDTH){
             public void paint(Graphics graphics)
                {
                    graphics.clear();
                    graphics.setColor(Color.WHITE);
                    graphics.fillRoundRect(10, 10,460, 400, 25,25 );
                    super.paint(graphics);
                }

              protected void sublayout(int maxWidth, int maxHeight)
                {
                    int displayWidth = (Display.getWidth());
                    int displayHeight = (Display.getHeight());

                    super.sublayout( displayWidth, displayHeight);
                    setExtent( displayWidth, displayHeight);
                }

        };

然后我创建了一个名为 BaseHeaderBlueScreen 的自定义 Manager 类,它呈现一个蓝色矩形:

public void paint(Graphics graphics)
    {
     graphics.clear();
     graphics.setColor(610212);
     graphics.fillRect(20, 0, Display.getWidth(), Display.getHeight());
     super.paint(graphics);
    }

    protected void sublayout(int maxWidth, int maxHeight)
    {
        int displayWidth = (Display.getWidth()-40);
        int displayHeight = ((Display.getHeight()/2))-90;

        super.setExtent( displayWidth, displayHeight);
    }   

最后,我将该自定义管理器添加到带有白色圆角矩形的 VerticalFieldManager:

BaseHeaderBlueScreen _vhbs = new BaseHeaderBlueScreen(textTop, textBottom, 0);
        _vhbs.setPadding(20,30,0,0);
        _vfmBackground.add(_vhbs);

这就是蓝色矩形在白色矩形内的显示方式。

在此处输入图像描述

但这就是蓝色矩形当前的显示方式(请注意其左侧的灰色空间):

在此处输入图像描述

我应该如何完全按照需要渲染蓝色矩形(没有左灰色边框)?

4

1 回答 1

1

我认为你只是在不必要地打电话给Graphics.clear(). clear()旨在用当前设置为背景颜色的任何颜色填充图形区域。通常,您会这样使用clear()

public void paint(Graphics g) {
    g.setBackgroundColor(Color.GRAY);
    // calling clear makes the background gray
    g.clear();

    // now draw some text
    g.setColor(Color.WHITE);
    g.drawText("hello", 20, 40);
}

来自clear() 的 API 文档

将整个图形区域清除为当前背景颜色。请注意,在这种情况下不应用全局 alpha。

但是,您在拨打clear()任何其他电话之前先拨打电话。

因此,只需删除对的两个调用clear()(尽管导致此特定问题的是调用 in BaseHeaderBlueScreen.paint())。

于 2012-12-05T14:13:56.080 回答