בדף הזה מוסבר איך לשלוט בהתנהגות ההתנגשות של סמן.
הגדרת התנהגות התנגשות של סמן
התנהגות ההתנגשות קובעת את האופן שבו סמן מוצג אם הוא מתנגש (חופף) עם סמן אחר. הדרך שבה יוצרים סמנים מתקדמים קובעת את אופן הפעולה של התנגשות:
סמנים מתקדמים שנוצרים באמצעות סמני
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);