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