0

我已将 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) { }
});
4

1 回答 1

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

于 2012-05-23T04:37:10.157 回答