Skip to content

Add labelPosition to the default marker icon and pick the marker drawn under the tap - #13

Merged
wf9a5m75 merged 1 commit into
developfrom
feature/marker-label-position
Oct 23, 2026
Merged

wf9a5m75 merged 1 commit into
developfrom
feature/marker-label-position

Conversation

@wf9a5m75

@wf9a5m75 wf9a5m75 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

概要

既定マーカーアイコン(ColorDefaultIcon / ImageDefaultIcon / DrawableDefaultIcon)に labelPosition を追加しました。ラベルをピンの横・上・下に置けます。あわせて、タップしたときに「指の下に描かれているマーカー」を選ぶようにしました。react-sdk / ios-sdk と同じ規則です。

labelPosition

String で、CSS の background-position と同じ書き方です(例: "right center"。既定は AbstractDefaultIcon.DEFAULT_LABEL_POSITION = "center center" で、従来どおりの表示)。

  • anchor と infoAnchor は、ラベルの配置から計算します。infoAnchor の指定値はピン本体に対する割合として扱います。
  • マーカー本体は canvas を平行移動してから描くので、サブクラスの drawMarkerFill は変えていません。
    • これにより、長いラベルで ImageDefaultIcon の画像だけ左にずれていた既存の不具合も直っています。

タップ判定

AbstractMarkerController.find と StrategyMarkerController.find は、これまで「先端が一番近い 1 つ」を矩形判定していました。今はタップ位置の周り(256dp)のマーカーを候補にして選びます。

  1. アイコン(ラベル込み)の矩形にタップ位置が入っているマーカーを優先します(手前のものが勝ちます)。
  2. どの矩形にも入っていなければ、許容範囲内でアンカーが一番近いものを選びます。

追加した部品は次のとおりです。

  • MarkerHitPick: @InternalMapConductorApi。選び方の本体です。
  • MarkerIconExtent: @InternalMapConductorApi。アイコンの実寸を返します。
  • MarkerHitTest.hitsIcon: ラベルの広がりを見るようにしました。

確認(develop 上)

  • ./gradlew testDebugUnitTest は 257 件すべて成功しました(DefaultIconLabelPositionTest と MarkerHitTestPickTest を追加)。
  • 集約ビルドで apiCheck を実行し、変化なしでした。
  • エミュレータでの描画確認とタップ確認は、作業ブランチの側で実施しています。

マージ順

これがコアです。android-sdk-compose / android-for-maptiler / android-for-longdo の PR は、この PR に依存します。

この PR に依存する PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant