LibGDX - 在不调用“click”事件的情况下更改ImageButton的状态

时间:2015-04-21 04:44:50

标签: android libgdx imagebutton

LibGDXImageButton点击了活动。

myBtn.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            checkIfOtherButtnsPressed()
        }
    });

我有一些按钮,我在checkIfOtherButtnsPressed()做的是检查其他按钮的状态,如果按下按钮而另一个按钮也处于活动状态,我将状态改为

selected = false;

问题是在将状态从活动状态更改为非活动状态之后,它还会调用事件,就像我'上''一样,然后我再次进入checkIfOtherButtnsPressed()

我可以在不调度点击事件的情况下查看按钮状态,还是可以识别出“点击”的情况?

3 个答案:

答案 0 :(得分:0)

我不知道libgdx的正确方法名称,但简单的逻辑是你应该在更改状态时删除监听器并在状态改变后再次设置监听器。

myBtn.addListener(null);
myBtn.setSelected([true|false]);
myBtn.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            checkIfOtherButtnsPressed()
        }
    });

答案 1 :(得分:0)

除此之外,您还可以使用图片,这也是一种演员类型,并且可以使用drawable,当您点击其他演员时,您可以更改图片 绘制

Image imgBtn=new Image(drawableNonFocus);
imgBtn.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            // TODO Auto-generated method stub
            changeIfOtherButtonPressed();
        }
    });


    private void changeIfOtherButtonPressed()
    {
        imgBtn.setDrawable(drawableFocus);
    }

您可以更改drawable,如上面名为 changeIfOtherButtonPressed()的方法所示。

答案 2 :(得分:0)

我建议在Android上使用Libgdx功能。 Libgdx提供了绕过应用程序的物理按钮方面的方法。 首先,您将要创建一个精灵并将其加载到@overrides扩展Libgdx onCreate()类的主类的任何类的Game方法中。这将加载准备调用的精灵到你的renderer()方法中,然后你需要为你的渲染器分配一个spritebatch并从中调用一个draw方法到一个指定的坐标。

SpriteBatch batcher;
Batcher.draw(x, y, width, height) Documentation for [drawing][1]

然后为按钮指定边界矩形。当用户触摸屏幕上与您的按钮位置匹配的某个点时,将触发您的聆听者。

if (Gdx.input.justTouched()) {
    guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));
            if (pauseBounds.contains(touchPoint.x, touchPoint.y)) {
                SoundHandler.playSound(SoundHandler.clickSound);
                state = ConstantsHandler.GAME_PAUSED;
                return;
            }
        }

从Libgdx提供的SuperJumper演示中获取的片段将为您提供处理基于图形的事件的良好起点。 link here使用已经实现Android当前库的Libgdx方法总是更好,因为Android有各种方法与Libgdx类不兼容,导致将来无法调试或崩溃的应用程序。

这不是您当前问题的解决方案,而是帮助解决未来问题的替代途径。