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