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

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

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

הגדרת ההתנהגות במקרה של חפיפה בין סמנים

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

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

  • כל הסמנים המתקדמים האחרים, כולל אלה שנוצרו באמצעות השיטה 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 זמין במאמר Marker z-index.

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

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

בדוגמה הבאה מוגדרת התנהגות במקרה של חפיפה לסמן:

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 = CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL
val advancedMarkerOptions: AdvancedMarkerOptions = AdvancedMarkerOptions()
    .position(LatLng(10.0, 10.0))
    .collisionBehavior(collisionBehavior)

val marker: Marker = map.addMarker(advancedMarkerOptions) ?: error("Failed to add marker")

      

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(new LatLng(10.0, 10.0))
                .collisionBehavior(collisionBehavior);

Marker marker = map.addMarker(options);