没有显示透明背景?

时间:2011-05-30 14:24:42

标签: blackberry

嗨开发人员我有一个透明背景的屏幕(位图)。我有一个列表字段放在它上面,但问题是透明背景没有显示上一个屏幕,而是显示带有listfield的白色屏幕。

public class IndexScreen extends MainScreen implements ListFieldCallback {

    private Vector rows;
    ListField listItems;
    int listItem;
    int listFieldIndex = -1;
    TableRowManager row;
     Bitmap indexBox = Bitmap.getBitmapResource("res/screens/Index_Box.png");

    public IndexScreen() {
        listItems = new ListField() {
        listItems.setRowHeight(20);
        listItems.setCallback(this);
        rows = new Vector();

        listItems.setSize(rows.size());
        _listVfm = new VerticalFieldManager(Manager.VERTICAL_SCROLL) {

            public void paint(Graphics g) {
                g.drawBitmap(0, 0, UIinitialize.screenWidth,
                            UIinitialize.screenHeight, indexBox, 0, 0);

                super.paint(g);
            }

            protected boolean navigationMovement(int dx, int dy, int status,
                    int time) {
                return super.navigationMovement(dx, dy, status, time);
            }
            protected void sublayout(int maxWidth, int maxHeight) {

                layoutChild(listItems, maxWidth, maxHeight);
                setPositionChild(listItems, 5, 0);       
                    setExtent(maxWidth, 255);
            }
        };
        _listVfm.add(listItems);
        add(_listVfm);

        UiApplication.getUiApplication().invokeLater(new Runnable() {
            public void run() {
                listItems.invalidate();
            }
        }, 500, true);

    }

    public void drawListRow(ListField listField, Graphics graphics, int index,
            int y, int width) {
        TableRowManager rowManager = (TableRowManager) rows.elementAt(index);
        rowManager.drawRow(graphics, 0, y, width, listItems.getRowHeight());
    }

    class TableRowManager extends Manager {
        public TableRowManager() {
            super(0);
        }

        public void drawRow(Graphics g, int x, int y, int width, int height) {
            layout(width, 250);
            setPosition(x, y);
            g.pushRegion(getExtent());
            subpaint(g);
            g.setColor(0x00CACACA);     
            g.popContext();
        }
        protected void sublayout(int width, int height) {
            int preferredWidth = getPreferredWidth();
            Field field = getField(0);
            layoutChild(field, preferredWidth, height);
            setPositionChild(field, 0, 0);
            setExtent(width, height);

        }
        public int getPreferredWidth() {
            return listItems.getWidth();
        }
        public int getPreferredHeight() {
            return listItems.getRowHeight();
        }
    }

    public Object get(ListField listField, int index) {
        return null;
    }
    public int getPreferredWidth(ListField listField) {
        return 0;
    }
    public int indexOfList(ListField listField, String prefix, int start) {
        return 0;
    }
}

上面的代码是我正在使用的代码的一部分。如何实现查看透明背景。任何人都可以帮助我。谢谢。

2 个答案:

答案 0 :(得分:1)

MainScreen包含自己的非透明背景。如果你想拥有透明/半透明的背景,你必须扩展屏幕。

答案 1 :(得分:0)

我在我的应用中使用的另一个选项是使用FullScreen而不是MainScreen。 FullScreen允许透明背景。如果您正在使用setStatus或setTitle,则必须找到另一种显示该数据的方法,否则它将非常相似。

但是,从您的代码中扩展Screen而不是MainScreen可能会更合适。