2017-03-20 5 views
0

私はonMapObjectsSelectedイベントを登録して、どのマーカーがクリックされたかを知ることができます。デバッグ中に、私は以前に選択されたすべてのマーカーと、ユーザーがクリックしたマーカーを返します。ここをクリックしてマーカーを選択解除する方法アンドロイドSDK

@Override 
public boolean onMapObjectsSelected(List<ViewObject> objects) { 
    // objects list holds all markers which are clicked. 
    for (ViewObject viewObj : objects) { 
     if (viewObj.getBaseType() == ViewObject.Type.USER_OBJECT) { 
      if (((MapObject) viewObj).getType() == MapObject.Type.MARKER) { 
       MapMarker selectedMarker = ((MapMarker) viewObj); 
      } 
     } 
    } 
} 

しかし、私はリストから最近クリックされたものを特定する必要があります。それで、これを行う方法はありますか、ここでは、マップSDKは、マーカーの選択を解除する機能を提供しています。

+0

@AndrewJCのコメントありがとうございます。あなたが正しいです。私はもっ​​とデバッグして同じ理由を見つけました。これを処理するオプションはありますか?実際にクリックされたマーカーを取得するにはどうすればいいですか?ありがとう –

+0

私は答えに自分のコメントを変換しました。 – AndrewJC

答えて

1

マーカーは、同じタップジェスチャーですべて選択できるように、互いに十分近くにありますか?タップジェスチャーは、Map#getSelectedObjects(ViewRect rect)APIを使用して選択されたオブジェクトを確認するために、小さなバウンディングボックスを使用します。そうであれば、複数のオブジェクトがAPIによって返される可能性があります。あなたが記述しているときに以前に選択されたオブジェクトの状態を保存すべきではないので、オブジェクトはすべて非常に接近しているため、すべて選択されています。

この場合、返されたList<ViewObject>の最初の項目が最も一致する必要があります。表示されない場合は、Map#pixelToGeo(PointF point)を使用して実際のタッチポイントからの距離をソートし、GeoCoordinate#distanceTo(GeoCoordinate coord)を使用してタッチポイントとViewObjectの距離を比較してみてください。またはonTapEvent(PointF p)PointFを使用してMap#getSelectedObjects(PointF p)に直接電話することもできます。これはタッチポイントの周りに誤差の余裕がないので、タッチの相互作用はそれほど快適ではないかもしれませんが。

+0

詳細を説明してくれてありがとう。 –

関連する問題