2014-09-11 1 views
0

Мне нравится макет интерфейса 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.

Однако этот код имеет две проблемы:

  1. Когда я отпускаю мышь или поднять палец, кнопка возвращается в исходное положение.
  2. Если я перетаскиваю мышь или мой палец вверх, чтобы она оставила кнопку, кнопка вкратце вернется в исходное положение, а затем продолжит перетаскивание. Если я отпустите мышь или подниму палец в этом состоянии, когда она находится за кнопкой, кнопка останется там, где она есть.

То, что происходит, заключается в том, что всякий раз, когда кнопка меняет состояние от нажатого до неубранного или наоборот, макет экрана пересчитывается, и кнопка возвращается в исходное положение.

Есть ли способ рассказать экран, чтобы не пересчитать его расположение? Могу я сказать кнопке, что она действительна?

Единственная стратегия, о которой я могу думать, это поместить кнопку в макет оси, вычислить ее позицию, а затем переместить ее из макета оси в абсолютную компоновку, пока я ее перемещаю. Надеюсь, что есть более простой способ.

ответ

1

Идея TriplePlay элементов является то, что они позиционируют себя, на основе макетов, ограничений, размер, и т.д., и т.д.

Если вы хотите, чтобы иметь возможность перемещать их, вам нужно использовать AbsoluteLayout

 Смежные вопросы

  • Нет связанных вопросов^_^