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