2012-05-17 3 views
0

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

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

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) { } 
}); 
+0

Если вы не можете подключить слушателя к GroupLayer, альтернативным подходом было бы установить прослушиватель на указателе, а затем вызвать событие при условии столкновения между местоположением события указателя и GroupLayer. Пример концепции можно найти здесь: [PlaynDev.java] (http://code.google.com/p/klenwell/source/browse/trunk/projects/java/playndev/playndev/core/src/main/java /com/googlecode/klenwell/playndev/core/PlaynDev.java#55) – klenwell

ответ

5

Группа Layer никогда не будет «ударять» щелчком мыши. Один из дочерних элементов 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 поразит всех своих детей, и если кто-либо из них попал, он сам возвращает в качестве слоя с ударом. Затем слушатели, зарегистрированные на вашем групповом уровне, будут запущены, как если бы щелкнул сам групповой слой.

+0

'setHitTester' не работал для меня, я добавил журнал, и он хранил loggin' hitlayer = null', где бы я ни указывал мой указатель мыши (я тоже отлаживает «Point p» и показывает правильные координаты). –

+1

ОК, я просто немного отлаживал и видел, что слои для детей должны быть установлены на интерактивные. –

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