如何在playn中将侦听器添加到GroupLayer?

时间:2012-05-17 09:13:12

标签: java gwt listener playn

我在ImageLayer中使用了Pointer.Listener和Mouse.Listener并且它有效。但是当我将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) { }
});

1 个答案:

答案 0 :(得分:5)

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对其所有子项进行测试,如果有任何子项被击中,则会返回本身作为命中图层。然后,在组图层上注册的侦听器将像单击组图层一样运行。