0

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

1 に答える 1

5

GroupLayer 自体がマウス クリックによって「ヒット」されることはありません。GroupLayer の子の 1 つがヒットする可能性がありますが、グループ レイヤーに登録されているリスナーはトリガーされず、子自体でのみトリガーされます。

複数の子を含む 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 に答える