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