Фоновое изображение за двумя полями в пользовательском HorizontalFieldManager - PullRequest
0 голосов
/ 19 апреля 2011

Ниже код определяет горизонтальный менеджер полей с двумя полями. Как я могу изменить код так, чтобы фон был установлен только для двух полей, которые добавляются, а не для всего менеджера. Обратите внимание, я не пытаюсь добавить отдельное фоновое изображение к каждому из полей, вместо этого оно используется для общего фонового изображения, которое находится за этими двумя полями.

 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 ]

1 голос
/ 20 апреля 2011

Вместо того, чтобы помещать их в пользовательский Менеджер, может быть проще просто переопределить вызовы layout () Поля, чтобы они были

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

, а затем вы можете просто использовать обычный HorizontalFieldManager, который вы можете установитьфон на и отступ (hfm.setPadding(10, 10, 10, 10);).Добавление отступов уменьшит доступную ширину ваших полей, поэтому вы должны уменьшить их ширину в вызовах layout ().

1 голос
/ 19 апреля 2011

Вы можете компенсировать каждый из их отдельных фонов с помощью какой-нибудь изящной, дорогой работы с растровым изображением (математика), чтобы «делиться» одним изображением, используя setBackGround (), или вы можете переопределить их методы рисования для достижения того же эффекта с возможностью "перемещаться" по растровому изображению в соответствии с их относительным положением ... Это то, что вы после? :)

редактирование: создайте настраиваемое поле для использования своего растрового изображения и подайте в него любое содержимое, которое вам нужно, а затем переопределите рисование, чтобы рисовать то, что вам нравится, где вам нравится ...

protected void paint(Graphics g){
    // conditionals, etc 
    g.drawBitmap(x, y, width, height, bitmap, left, top); 
    // color changes, etc 
    g.drawText(yourText); 
    // clean up 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...