LibGDX - изменить состояние ImageButton без вызова события click
В LibGDX
я имею ImageButton
с событием для нажатия.
myBtn.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
checkIfOtherButtnsPressed()
}
});
У меня есть несколько кнопок и что я делаю в checkIfOtherButtnsPressed()
проверяет состояние других кнопок, если кнопка была нажата, а другая находится в активном состоянии, я изменяю ее состояние на
selected = false;
проблема в том, что после изменения его состояния с активного на неактивное, оно также вызывает событие, как будто я "кликнул" по нему, и я попадаю в checkIfOtherButtnsPressed()
снова.
Могу ли я изменить состояние кнопки, не отправляя событие click, или узнать, из какой ситуации был щелчок?
3 ответа
Я не знаю правильных имен методов для libgdx, но простая логика заключается в том, что вы должны удалить прослушиватель при изменении состояния и снова установить прослушиватель после изменения состояния.
myBtn.addListener(null);
myBtn.setSelected([true|false]);
myBtn.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
checkIfOtherButtnsPressed()
}
});
Кроме того, вы можете использовать изображение, которое также является типом актера, и использовать рисование, и всякий раз, когда в этот раз щелкает другой актер, вы можете изменить свой рисунок.
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);
}
Вы можете изменить рисование, как показано в приведенном выше методе с именем changeIfOtherButtonPressed ().
Я бы предложил использовать функции Libgdx на Android. Libgdx предлагает способ обойти физический аспект приложений. Во-первых, вы захотите создать спрайт и загрузить его в свой onCreate()
метод любого класса, который @ overrides вашего основного класса, который расширяет Libgdx Game
учебный класс. Это загрузит спрайт, готовый к вызову в ваш renderer()
Затем вам нужно будет назначить spritebatch для вашего средства визуализации и вызвать метод отрисовки из этого для назначенных координат.
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;
}
}
Фрагмент, взятый из демонстрации SuperJumper, предоставленной Libgdx, даст вам отличную отправную точку для работы с событиями на основе графики. Ссылка здесь всегда лучше использовать методы Libgdx, которые реализовали текущие библиотеки Android, потому что Android имеет различные методы, которые не совместимы с классами Libgdx, что приводит к непредвиденной отладке или сбоям приложения в будущем.
Это не решение вашей текущей проблемы, а альтернативный способ решения будущих проблем.