2016-03-29 2 views
2

Из того, что я понимаю, ScrollPane может добавить к нему несколько виджетов, используя таблицу в качестве виджета ScrollPane (так оно выполняется в тестах ScrollPane в репозитории libGDX).libGDX ScrollPane с WidgetGroup вместо таблицы в качестве виджета ScrollPane?

Я хотел бы достичь чего-то подобного, но хотел бы иметь абсолютное позиционирование многих участников виджета ScrollPane, а не табличное позиционирование, которое обеспечивается с помощью таблицы в виде виджета ScrollPane.

Я закончил с этим кодом, который не работает, но в соответствии с libGDX javadoc он должен и я не знаю, почему он не работает!

stage = getStage(); 

// Scroll pane outer container 
Container<ScrollPane> container = new Container<ScrollPane>(); 
container.setSize(Game.getWidth(), Game.getHeight()); 

// Scroll pane inner container 
WidgetGroup widgetGroup = new WidgetGroup(); 
widgetGroup.setFillParent(true); 
widgetGroup.addActor(new Image(MAP_TEXTURE_ATLAS.findRegion("map"))); 

// Scroll pane 
ScrollPane scrollPane = new ScrollPane(widgetGroup); 
container.setActor(scrollPane); 

stage.addActor(container); 

Ничего не отображается на экране;

Это, однако работать с ниже код (который, очевидно, не то, что я хочу, как виджет ScrollPane является контейнером, который может иметь только один актер)

// Scroll pane outer container 
Container<ScrollPane> container = new Container<ScrollPane>(); 
container.setSize(Match3.getWidth(), Match3.getHeight()); 

// Scroll pane inner container 
Container container2 = new Container(); 
container2.setBackground(new TextureRegionDrawable(MAP_TEXTURE_ATLAS.findRegion("map"))); 

// Scroll pane 
ScrollPane scrollPane = new ScrollPane(container2); 
container.setActor(scrollPane); 

stage.addActor(container); 

Есть ли способ использовать WidgetGroup с ScrollPane или любым способом, как я могу достичь требуемых функций.

Благодаря

АЛЬТЕРНАТИВНЫЕ РЕАЛИЗАЦИЯ ПРИНЯТЫХ ОТВЕТА

После прочтения принятого ответа, я решил создать свой собственный класс, реализация ниже;

// Scroll pane outer container 
Container<ScrollPane> container = new Container<ScrollPane>(); 
container.setSize(Match3.getWidth(), Match3.getHeight()); 

class ScrollWidget extends WidgetGroup { 

    private float prefHeight; 
    private float prefWidth; 

    public ScrollWidget(Image image) { 

    prefHeight = image.getHeight(); 
    prefWidth = image.getWidth(); 

    addActor(image); 
    } 

    @Override 
    public float getPrefHeight() { 

    return prefHeight; 
    } 

    @Override 
    public float getPrefWidth() { 

    return prefWidth; 
    } 
} 

ScrollWidget scrollWidget = new ScrollWidget(
    new Image(MAP_TEXTURE_ATLAS.findRegion("map")) 
); 

// Scroll pane 
ScrollPane scrollPane = new ScrollPane(scrollWidget); 
scrollPane.setOverscroll(false, false); 

scrollPane.layout(); 
scrollPane.updateVisualScroll(); 
scrollPane.setScrollY(scrollPane.getMaxY()); 

container.setActor(scrollPane); 

stage.addActor(container); 

ответ

0

При работе с WidgetGroup вы должны сами установить размеры. Актер Изображение не имеет ни малейшего представления о том, что предпочтительная ширина/высота должна быть и будет по умолчанию 0.

непроверенного кода, но я использую что-то подобное себе:

Stage stage = new Stage(); 
WidgetGroup group = new WidgetGroup(); 
Scrollpane scrollPane = new ScrollPane(group); 
scrollpane.setBounds(0,0,screenWidth,screenHeight); 
group.setBounds(0,0,totalWidth,totalHeight); 
Image image = new Image(texture); 
image.setBounds(0,0,imageWidth,imageHeight); 
group.addActor(image); 
stage.addActor(scrollPane); 
+0

Спасибо, это была проблема! Я отредактировал свой вопрос, чтобы включить решение, подобное тому, как вы его решили. – GradeRetro

Смежные вопросы