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