התנהגות התנגשות

בחירת פלטפורמה: Android iOS JavaScript

בדף הזה מוסבר איך לשלוט בהתנהגות ההתנגשות של סמן.

הגדרת התנהגות התנגשות של סמן

התנהגות ההתנגשות קובעת את האופן שבו סמן מוצג אם הוא מתנגש (חופף) עם סמן אחר. הדרך שבה יוצרים סמנים מתקדמים קובעת את אופן הפעולה של התנגשות:

  • סמנים מתקדמים שנוצרים באמצעות סמני BitmapDescriptorFactory נקראים סמני מפת סיביות. הסמנים האלה משורטטים על ידי מפת הליבה.

  • כל הסמנים המתקדמים האחרים, כולל אלה שנוצרו באמצעות השיטה AdvancedMarkerOptions.iconView(), נקראים סמני תצוגה ומשרטטים בשכבה מעל המפה המרכזית.

כדי להגדיר התנהגות התנגשות, מגדירים את AdvancedMarkerOptions.collisionBehavior לאחת מהאפשרויות הבאות:

  • CollisionBehavior.REQUIRED: (ברירת מחדל) הסמן תמיד יוצג ללא קשר להתנגשות.
  • CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL להציג תמיד את הסמן ללא קשר להתנגשות, ולהסתיר את הסמנים או התוויות של OPTIONAL_AND_HIDES_LOWER_PRIORITY שחופפים לסמן.
  • CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY יציגו את הסמן רק אם הוא לא חופף לסמנים אחרים.

    • אם שני סמנים של מפת סיביות חופפים, יוצג הסמנים עם הערך zIndex הגבוה יותר. אם יש להם אותו ערך של zIndex, יוצג המיקום שמופיע במסך האנכי התחתון. למידע נוסף על zIndex ראו Markerz-index.

    • אם שני סמני view חופפים, יוצג זה עם הערך zIndex הגבוה יותר. אם יש להם אותו zIndex, הסמן האחרון שנוצר חופף לסמנים שנוצרו לפניו.

    • מכיוון שסמני תצוגה משורטטים בשכבה מעל סמני מפת סיביות, סמני תצוגה חופפים לסמנים של מפת סיביות. לכן, כדאי לנסות להשתמש בסמנים מאותו סוג כדי לשפר את בקרת ההתנגשויות.

הדוגמה הבאה מציגה התנהגות התנגשות של סמן:

Kotlin

// Collision behavior can only be changed in the AdvancedMarkerOptions object.
// Changes to collision behavior after a marker has been created are not possible
val collisionBehavior: Int = AdvancedMarkerOptions.CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL
val advancedMarkerOptions: AdvancedMarkerOptions = AdvancedMarkerOptions()
    .position(latLng)
    .collisionBehavior(collisionBehavior)
val marker: Marker = map.addMarker(advancedMarkerOptions)

Java

// Collision behavior can only be changed in the AdvancedMarkerOptions object.
// Changes to collision behavior after a marker has been created are not possible
int collisionBehavior = AdvancedMarkerOptions.CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL;
AdvancedMarkerOptions options =
        new AdvancedMarkerOptions()
            .position(latLng)
            .collisionBehavior(collisionBehavior);
Marker marker = map.addMarker(options);