Libgdx 之List 列表类

上一节介绍完Actor 演员类,现在要介绍Widget了。Widget也是一个演员,参与layout,而且提供了minimum, preferred, and maximum size,但是没有具体的实现,因此再介绍Widget的子类List。

类的继承图

先上类图是因为实在没啥好讲的
Libgdx 之List 列表类_第1张图片

ListStyle

要想使用List那么必须先定义ListStyle,ListStyle定义了List的各种属性。
Libgdx 之List 列表类_第2张图片
通过上面可以指定ListStyle定义了List的字体,item被选中时字体颜色,未选中时字体颜色,选中时背景图片, 背景图。
而且通过代码可以看出Optional上面的属性为必须声明的属性,必须初始化。而且可以知道fontColorSelected 和 fontColorUnselected已经被初始化了,也可以另外赋值 font和selection必须被初始化,否则报空指针异常。

测试代码

在测试的时候list.getWidth()=0, list.getPreWidth()=实际大小。在测试过程中发现如果不设置list.setSize(list.getPrefWidth(), list.getPrefHeight()); 那么Listener事件不会响应,而且selection图片也不会显示
而且在resize方法中要调用viewport.update(width, height);否则在调整屏幕时点击item会发生偏移

    Stage stage;
    List<String> list;
    String[] listName = {"Libgdx", "CSDN", "daXiao","Leitu","Renhua"};
    StretchViewport viewport;

    @Override
    public void create() {
        viewport = new StretchViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        viewport.getCamera().translate(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() /2, 0);
        viewport.getCamera().update();

        List.ListStyle style = new List.ListStyle();
        style.font = new BitmapFont();
        style.selection = new TextureRegionDrawable(new TextureRegion(new Texture("badlogic.jpg")));

        list = new List<String>(style);
        list.setItems(listName);
        // 如果不设大小,那么selection就不会显示,也不会响应click事件
        list.setSize(list.getPrefWidth(), list.getPrefHeight());
        list.setPosition(200, 200);
        list.addListener(new ClickListener() {

            @Override
            public void clicked(InputEvent event, float x, float y) {
                System.out.println("selected index=" + list.getSelectedIndex());
                System.out.println("setected=" + list.getSelected());
                super.clicked(event, x, y);
            }

        });
        Gdx.app.log("List", "width="+list.getWidth() + "prefer width="+list.getPrefWidth());

        stage = new Stage(viewport);
        Gdx.input.setInputProcessor(stage);

        stage.addActor(list);
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0.39f, 0.58f, 0.92f, 1.0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        stage.act();
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {
        viewport.update(width, height);
    }

    @Override
    public void dispose() {
        stage.dispose();
    }

Libgdx 之List 列表类_第3张图片

你可能感兴趣的:(Libgdx 之List 列表类)