Мне нравится макет интерфейса Tripleplay для структуры PlayN, но могу ли я иногда отключить раскладку макета, чтобы я мог перемещать вещи или менять текст виджета, не вызывая вычисления макета?Перетащите виджет PlayN/Tripleplay без пересчета макета
Например, я создал простой экран с помощью одной кнопки в AxisLayout
, и добавил слушателя к кнопке:
button.layer.addListener(new Adapter() {
private float startX;
@Override
public void onPointerStart(Event event) {
startX = event.localX();
}
@Override
public void onPointerDrag(Event event) {
button.layer.transform().translateX(event.localX() - startX);
}
});
Теперь перетаскивая кнопку перемещает его влево и вправо, и я Я счастлив. Вы можете увидеть исходный код on Github.
Однако этот код имеет две проблемы:
- Когда я отпускаю мышь или поднять палец, кнопка возвращается в исходное положение.
- Если я перетаскиваю мышь или мой палец вверх, чтобы она оставила кнопку, кнопка вкратце вернется в исходное положение, а затем продолжит перетаскивание. Если я отпустите мышь или подниму палец в этом состоянии, когда она находится за кнопкой, кнопка останется там, где она есть.
То, что происходит, заключается в том, что всякий раз, когда кнопка меняет состояние от нажатого до неубранного или наоборот, макет экрана пересчитывается, и кнопка возвращается в исходное положение.
Есть ли способ рассказать экран, чтобы не пересчитать его расположение? Могу я сказать кнопке, что она действительна?
Единственная стратегия, о которой я могу думать, это поместить кнопку в макет оси, вычислить ее позицию, а затем переместить ее из макета оси в абсолютную компоновку, пока я ее перемещаю. Надеюсь, что есть более простой способ.