黑莓 - 有透明行的Listfield

时间:2011-06-29 17:04:32

标签: blackberry

我的屏幕背景图像的呈现方式如下:

     bg = new VerticalFieldManager(
            VerticalFieldManager.USE_ALL_WIDTH |
            VerticalFieldManager.USE_ALL_HEIGHT |
            VerticalFieldManager.NO_HORIZONTAL_SCROLLBAR |
            VerticalFieldManager.NO_VERTICAL_SCROLLBAR |
            VerticalFieldManager.NO_HORIZONTAL_SCROLL |
            VerticalFieldManager.NO_VERTICAL_SCROLL) {
        //Override the paint method to draw the background image.
        public void paint(Graphics graphics) {
            //Draw the background image and then call paint.
            graphics.drawBitmap(Graphics.getScreenWidth()/2 - bgBitmap.getWidth()/2,
                    Graphics.getScreenHeight()/2 - bgBitmap.getHeight()/2, 
                    bgBitmap.getWidth(), bgBitmap.getHeight(), bgBitmap, 0, 0);
            super.paint(graphics);
        }
    };
    add(bg);

然后我将屏幕的任何字段添加到此经理。我有一个ListField,我想看看背景。首次渲染屏幕时,一切都很顺利。我可以看到图像。只要我向下滚动,选择一些并取消选择它,背景就会消失(变成白色)。

在绘制列表行时是否需要做一些特殊的事情,以便在选择颜色消失后使它们真正透明?

注意:我发现无论在背景上绘制什么字段,都会发生这种情况。它会正确显示,直到为给定的可聚焦字段绘制选择颜色,然后您选择其他内容。所有填充了选择颜色的区域在取消选择后变为默认白色。

2 个答案:

答案 0 :(得分:1)

在onfocus()和onunfocus()方法中使用invalidate()函数。

例如,如果您使用LabelField,请使用:

LabelField l=new LabelField("Hello",FOCUSABLE)
        {
            protected void onFocus(int direction) 
            {
                invalidate();
                super.onFocus(direction);
            }
            protected void onUnfocus() 
            {
                invalidate();
                super.onUnfocus();
            }
        };

答案 1 :(得分:0)

我最终在我的自定义ListField中覆盖了moveFocus()。

    public int moveFocus(int amount, int status, int time) {
        invalidate(getSelectedIndex());
        return super.moveFocus(amount, status, time);
    }

Vivek的方法适用于ListField行之外的单个字段。