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