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