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

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

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

הגדרת התנהגות התנגשות עבור סמן

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

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

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

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

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

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

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

    • מכיוון שסמני view משורטטים בשכבה מעל סמנים של bitmap, הסמנים של View חופפים לסמני 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 = 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);