Libgdx之Button TextButton ImageButton ImageTextButton 按钮使用

Button 即按钮,在游戏界面中最常用的元素之一。Button具有3中状态: pressed, unpressed, checked。点击Button按钮时, checked状态触发。 同样Button也是一个Table,可以当做承装其它Actor的容器。

Button的preferred size由背景图片和里面的装载的演员决定的。点击Button时ChangeEvent事件被触发,按钮也会保存checked 状态。通过Button的初始化化函数

public Button (Drawable up) {

this(new ButtonStyle(up, null, null));

}

我们知道,在初始化化Button的时候可以不定义ButtonStyle或者Skin,为想要练习的我们能省下不少时间。但是为了游戏的更美观,建议使用uiskin.json,省去我们定义ButtonStyle的时间。

  • TextButton extends Button。在Button里面加了一个Label用来显示文字。
  • ImageButton extends Button。 在Button里面增加了一个Image来显示图片。
  • ImageTextButton extends Button。 在Button里面增加了一个Label和Image来显示文字和图片。

下面直接展示代码和图片来的更直观一些

Stage stage;
    Skin skin;

    Button bt;
    TextButton tb;
    ImageButton ib;
    ImageTextButton itb;

    Texture imgUp, imgChecked;

    @Override
    public void create() {
        stage = new Stage();
        Gdx.input.setInputProcessor(stage);

        skin = new Skin(Gdx.files.internal("uiskin.json"));

        // 单纯的一个按钮
        bt = new Button(skin);
        // isChecked默认是false的
        bt.setPosition(Gdx.graphics.getWidth() / 2, 20);
        Gdx.app.log("Button", "width=" + bt.getWidth() + "preWidth=" + bt.getPrefWidth());
        Gdx.app.log("Button", "isChecked=" + bt.isChecked());
        bt.addListener(new ClickListener() {

            @Override
            public void clicked(InputEvent event, float x, float y) {
                // 通过log可以看出点击Button后,checked状态在切换
                Gdx.app.log("Button", "isChecked=" + bt.isChecked());
            }

        });
        stage.addActor(bt);

        // 在按钮上显示文字
        tb = new TextButton("Button", skin);
        tb.setPosition(bt.getX(), bt.getY() + bt.getPrefHeight() + 10);
        tb.addListener(new ClickListener() {

            @Override
            public void clicked(InputEvent event, float x, float y) {
                if (tb.isChecked()) {
                    tb.setText("Clicked me");
                    // 不重新设置大小,文字将会出现在Button边框之外
                    tb.setSize(tb.getLabel().getPrefWidth(), tb.getLabel().getPrefHeight());
                } else {
                    tb.setText("Button");
                }
            }

        });
        stage.addActor(tb);

        imgChecked = new Texture(Gdx.files.internal("badlogic.jpg"));
        imgUp = new Texture(Gdx.files.internal("badlogic.jpg"));

        TextureRegion region = new TextureRegion(imgChecked);
        region.flip(true, true);
        TextureRegion regionDown = new TextureRegion(imgUp);
        regionDown.flip(true, false);
        // 设置了imageUp imageDown imageChecked的图片之后点击就会看见图片随之发生变化
        ib = new ImageButton(new TextureRegionDrawable(new TextureRegion(imgUp)),
                    new TextureRegionDrawable(regionDown), new TextureRegionDrawable(region));
        ib.setSize(120, 120);
        ib.setPosition(tb.getX(), tb.getY() + tb.getHeight() + 20);
        ib.debug();
        stage.addActor(ib);

        ImageTextButton.ImageTextButtonStyle itbs = new ImageTextButton.ImageTextButtonStyle();
        // 从skin中获取字体
        itbs.font = skin.get("default-font", BitmapFont.class);
        itbs.imageUp = new TextureRegionDrawable(new TextureRegion(imgUp));
        itbs.imageDown = new TextureRegionDrawable(regionDown);
        itbs.imageChecked = new TextureRegionDrawable(region);
        itb = new ImageTextButton("ImageText", itbs);
        // 文字和图片的长度一共是120,默认是左边图片右边文字,可以自己重新写Image
        itb.setSize(120, 120);
        itb.setPosition(ib.getX(), ib.getY() + ib.getHeight() + 20);
//      默认是Fit,可以切换到这个模式看看图片的变化
//      itb.getImage().setScaling(Scaling.stretch);
        itb.addListener(new ClickListener() {

            @Override
            public void clicked(InputEvent event, float x, float y) {
                if (itb.isChecked()) {
                    itb.setText("Click me");
                } else {
                    itb.setText("ImageText");
                }
            }

        });
        stage.addActor(itb);

//      itb = new ImageTextButton("ImageTest", style)
    }

    @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();

        // 当Button按下时触发此事件
        if (bt.isPressed()) {
            Gdx.app.log("Button", "isPressed");
        }
        // 当鼠标滑过此按钮时触发此事件
        if (bt.isOver()) {
            Gdx.app.log("Button", "isOver");
        }
    }

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

时间: 2024-10-11 21:33:55

Libgdx之Button TextButton ImageButton ImageTextButton 按钮使用的相关文章

Android控件之Button(按钮控件)和ImageButton(图片按钮控件)

一.Button和ImageButton特证: 1.共同特证: 都可以作为一个按钮产生点击事件 2.不同特证: Button有text的属性,ImageButton没有 ImageButton有src属性,Button没有 二.布局文件中设置Button和ImageButton控件 <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_heigh

Android 按钮 Button和ImageButton

Button -- 按钮ImageButton -- 图片按钮Button和ImageButton特征1.共有的特征都可以作为一个按钮产生点击事件2.不同点: (1)Button有text属性,ImageButton没有 (2)ImageButton有src属性,Button没有3.产生明显的点击效果 实现Button和ImageButton的效果注:我们一般不把android:text的信息直接写而是放在res/values/strings.xml文件中在string.xml中添加button

Android基础入门教程——2.3.3 Button(按钮)与ImageButton(图像按钮)

Android基础入门教程--2.3.3 Button(按钮)与ImageButton(图像按钮) 标签(空格分隔): Android基础入门教程 本节引言: 今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮: 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解,另外Button是TextView的子类,所以TextView上很多属性也可以应用到Bu

Android ListView的Item中的按钮Button和ImageButton共存、抢夺焦点问题

一.问题 公司App要求实现和淘宝类似的功能:从淘宝app某个商品详情点击聊天进入聊天界面,会带入商品信息.点击"发送宝贝链接"按钮,发送一条消息(宝贝链接)给卖家.如图: 在开发中遇到的问题就是,点击"发送宝贝链接"按钮,宝贝链接的消息已发送成功,但是不会再页面上显示,已添加到Adapter且notifyDataSetChanged了.但是当你触摸屏幕滑动后,宝贝链接的消息就会出现. 二.分析 在Android开发中,Button.ImageButton.和Edi

Android监听Button和ImageButton控件的点击事件

一.onClick事件 Button和ImageButton都有一个onClick事件,通过自身的.setOnClickListener(OnClickListener)方法添加点击事件 所有的控件都有onClick事件,不仅仅是Button和ImageButton才有 通过点击事件的监听可以实现点击按钮之后要发生什么动作 二.操作的基本步骤:  第一步:声明一个私有变量,用于存储获取到的控件对象 第二步:初始化当前需要的控件(找到需要操作的那个控件) 第三步:设置Button的监听器,通过监听

android listview和button,ImageButton等有事件的控件的总结

? 1 2 3 4 public ImageButton(Context context, AttributeSet attrs, int defStyle) {     super(context, attrs, defStyle);     setFocusable(true); } 在listview中(或者ExpandableListview),item的view会被进行特殊的处理,通过convertview可以减少解析xml文件,提高效率.但是如果你自己解析一次,然后用变量保存,那么只

Button、ImageButton及ImageView详解

在应用程序开发过程中,很多时候需要将View的background或者src属性设置为图片,即美观又支持点击等操作.常见的有Button.ImageButton及Imageview,以ImageView为例,在图片浏览器或者编辑工具的开发中使用得非常广泛.由于三者之间存在非常紧密的联系,又有微妙的差别,有时候会傻傻地分不清到底该用谁.本篇文章通过概念讲解与代码分析的形式对它们做一个详细的总结,完全清楚的小伙伴希望指出文中描述的不足之处. 1.基本概念 Button,普通按钮,是各种UI中最常用的

Android控件——Button与ImageButton

1.简单介绍 2.特征 3.实现Button和ImageButton 3.1使用Button 布局文件定义Button strings.xml定义常量(汉字一般定义在strings.xml中,布局文件中通过@string/name引用) 原理: res资源文件下的文件都会在gen目录下R.java中生成一个id,唯一标识一个资源. 效果: 3.1使用ImageButton 布局文件:背景颜色设为黑色,通过src引用图片(高度为包裹图片大小),如果通过background引入图片是图片适应按钮大小

07课Button和ImageButton的区别---【呼啸Android开发视频教程】

今天是第七课,主要讲了android中Button和ImageButton的区别. 播放地址: 点击打开链接 关于呼啸Android视频: 这套视频的最大特点是实用,哪些该讲,哪些不该讲,我都做了细致的考虑.没有虚头八脑,卖弄学问,也没用冗长的东西.一切都力求简单明了,清晰透彻.