Libgdx 之List 列表类

Posted zqiang_55

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Libgdx 之List 列表类相关的知识,希望对你有一定的参考价值。

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

类的继承图

先上类图是因为实在没啥好讲的

ListStyle

要想使用List那么必须先定义ListStyle,ListStyle定义了List的各种属性。

通过上面可以指定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 列表类的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx 之Actor 演员类

Libgdx 之Actions 动作类

Libgdx 之Stage 舞台类

Libgdx之Sprite 精灵类

Libgdx之Label Image

Libgdx 之CheckBox ScrollPane