在自定义水平FieldManager的两个领域后面的背景图象

时间:2011-04-19 15:37:51

标签: blackberry

下面的代码定义了一个带有两个字段的水平字段管理器。如何修改代码,以便在添加的两个字段上设置背景,而不是在整个管理器上。请注意,我不是试图将单个背景图像添加到每个字段,而是跨越两个字段后面的共享背景图像。

 LabelField label = new LabelField("name");

            TextField e = new TextField(Field.FOCUSABLE);

            final Bitmap b = Constants.SETTINGS;
            final Background bg = BackgroundFactory.createBitmapBackground(Constants.SETTINGS);

            HorizontalFieldManager manager = new HorizontalFieldManager()
            {
                public void sublayout (int width, int height)
                {

                    Field field;
                    int x = 0;

                    super.sublayout(b.getWidth(), height);
                    super.setExtent(b.getWidth(), height);
                    for (int i = 0; i < getFieldCount(); i++)
                    {
                        field = getField(i);
                        layoutChild(field, Display.getWidth()/2, height);
                        setPositionChild(field, x, 10);
                        x += Display.getWidth()/2;
                    }
                }
            };
            manager.add (label);
            manager.add (e);
            add (manager);

Image of desired effect

2 个答案:

答案 0 :(得分:1)

你可以通过一些花哨,昂贵的位图步法(数学)来偏移他们各自的背景,以显示&#34;分享&#34;一个图像使用setBackGround(),或者您可以覆盖它们的绘制方法,以实现相同的效果,并能够移动&#34;根据位图的相对位置跨位图... 你之后的事情是什么? :)

编辑: 创建一个自定义字段以使用您的位图并将其提供给您想要的任何内容,然后覆盖绘制以在您喜欢的位置绘制您喜欢的位置...

protected void paint(Graphics g){
    // conditionals, etc 
    g.drawBitmap(x, y, width, height, bitmap, left, top); 
    // color changes, etc 
    g.drawText(yourText); 
    // clean up 
}

答案 1 :(得分:1)

不是将它们放在自定义管理器中,而是覆盖Fields的layout()调用可能更容易

protected void layout(int width, int height) {
    super.layout(width, height);
    setExtent(Display.getWidth()/2, this.getHeight());
}

然后你可以使用普通的Horizo​​ntalFieldManager来设置背景和填充(hfm.setPadding(10, 10, 10, 10);)。添加填充将减少Fields的可用宽度,因此您应该减少layout()调用中的宽度。