Как добавить слушателя в GroupLayer в playn?

Я использовал Pointer.Listener и Mouse.Listener с ImageLayer, и это сработало. Но когда я использую Pointer.Listener для GroupLayer, он не слушает щелчки или касания. Как я могу это сделать?

Я использую следующий код.

myGroupLayer.addListener(new Pointer.Listener() {
  @Override
  public void onPointerEnd(Event event) {
    System.out.println("click registered");
    myMethodToRun();
  }
  @Override
  public void onPointerDrag(Event event) { }
  @Override
  public void onPointerStart(Event event) { }
});

person Rockcollins    schedule 17.05.2012    source источник
comment
Если вы не можете прикрепить прослушиватель к GroupLayer, альтернативным подходом будет установка прослушивателя на указатель, а затем запуск события при условии конфликта между местоположением события указателя и GroupLayer. Пример концепции можно найти здесь: PlaynDev.java   -  person klenwell    schedule 18.05.2012


Ответы (1)


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

Если у вас есть GroupLayer, который содержит несколько дочерних элементов, и вы хотите, чтобы событие было отправлено слушателю GroupLayer при щелчке любого из этих дочерних элементов, вам нужно использовать пользовательский тестер попаданий в GroupLayer:

myGroupLayer.setHitTester(new Layer.HitTester() {
  public Layer hitTest(Layer l, Point p) {
    Layer hitLayer = myGroupLayer.hitTestDefault(p);
    return (hitLayer != null) ? myGroupLayer : null;
  }
});

Это приведет к тому, что ваш GroupLayer проверит все свои дочерние элементы, и если какой-либо из дочерних элементов сработает, он вернет самого себя в качестве слоя попадания. Затем слушатели, зарегистрированные на вашем групповом слое, будут запущены, как если бы был выбран сам групповой слой.

person samskivert    schedule 23.05.2012
comment
setHitTester у меня не сработало, я добавил журнал, и он сохранял вход в систему hitlayer = null, куда бы я ни указывал курсором мыши (я также отладил Point p, и он показывает правильные координаты). - person Majid Laissi; 07.03.2013
comment
ОК, я только что провел некоторую отладку и увидел, что дочерние слои должны быть настроены на интерактивные. - person Majid Laissi; 07.03.2013