2016-04-19 2 views
2

Так недавно я обнаружил Scrollpanes и попытался реализовать его правильно.Libgdx Можете ли вы установить границы ScrollPane?

После недолгих поисков я нашел этот раздел кода

public void create() { 
    batch = new SpriteBatch(); 
    skin = new Skin(Gdx.files.internal("data/uiskin.json")); 
    stage = new Stage(); 

    gamelog = new Label("Start", skin); 
    gamelog.setAlignment(Align.center); 
    gamelog.setWrap(true); 

    Table scrollTable = new Table(); 
    scrollTable.add(gamelog); 
    scrollTable.row(); 

    scroller = new ScrollPane(scrollTable); 


    Table table = new Table(); 
    table.setFillParent(true); 
    table.add(scroller).fill().expand(); 

Теперь по большей части этот код работает хорошо. на самом деле создается прокрутка, и я могу динамически добавлять к ней текст. моя проблема однако в том, что размер scrollpane занимает весь экран, а исходный текст центрируется в середине прокрутки (так что посередине экрана) и только начинает прокручиваться, как только достаточно было добавлено текста, чтобы всей высоты экрана.

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

Я попытался установить границы таблиц и прокрутки, но ближайший я пришел, просто перемещая прокрутку вниз (это означает, что последний добавленный текст выключен и не отображается. Его s, если он полностью игнорирует какие-либо ширина или высота установлены и просто расширяются сами по себе.

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

ответ

0

Я наткнулся на решение с пробной и пробной версией. ошибка.

следующий код работает для меня и позволяет изменять размер и положение прокрутки. Главным виновником, по-видимому, является использование table.setFillParent (true); и порядок, в котором вы пытаетесь установить границы родительских таблиц.

batch = new SpriteBatch(); 
    skin = new Skin(Gdx.files.internal("data/uiskin.json")); 
    stage = new Stage(); 

    gamelog = new Label("Start", skin); 
    gamelog.setAlignment(Align.center); 
    gamelog.setWrap(true); 

    Table scrollTable = new Table(); 
    scrollTable.add(gamelog); 
    scrollTable.row(); 

    scroller = new ScrollPane(scrollTable); 

    Table table = new Table(); 
    table.setBounds(10, 10, 460, 200); 
    table.add(scroller).fill().expand(); 

    scrollTable.debug(); 
    scroller.debug(); 
    table.debug(); 

    stage.addActor(table); 
0

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

В исходном коде, попробуйте следующее:

table.add(scroller).size(460, 200); 

И если вы хотите, чтобы изменить размер ScrollPane после добавления его в таблицу, вы можете получить ячейку из таблицы, а затем установить его размер, как это:

table.add(scroller); 
... 
table.getCell(scroller).size(460, 200); 

А вот API для Cell:

+0

Если вы хотите, чтобы панель прокрутки соответствовала ширине экрана (а не жесткому кодированию такого размера), используйте 'table.add (скроллер) .height (200) .expandX(). FillX(). Bottom() ; 'и вместо того, чтобы устанавливать границы в таблице, продолжайте и выполните' table.setFillParent (true) '. – Tenfour04

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