Comportement en cas de collision

Sélectionnez une plate-forme : Android iOS JavaScript

Cette page explique comment contrôler le comportement d'un repère en cas de collision.

Définir le comportement d'un repère en cas de collision

Le comportement en cas de collision définit comment un repère s'affiche s'il entre en collision avec un autre repère (c'est-à-dire s'ils se chevauchent). La façon dont vous créez un repère avancé détermine comment il s'affiche en cas de collision :

  • Les repères avancés créés à l'aide de BitmapDescriptorFactory sont appelés "repères bitmap". Ils sont dessinés par la carte principale.

  • Tous les autres repères avancés, y compris ceux créés à l'aide de la méthode AdvancedMarkerOptions.iconView(), sont appelés "repères de vue" et sont dessinés sur un calque au-dessus de la carte principale.

Pour configurer le comportement en cas de collision, définissez AdvancedMarkerOptions.collisionBehavior sur l'une des valeurs suivantes :

  • CollisionBehavior.REQUIRED (par défaut) : Toujours afficher le repère, quelle que soit la collision.
  • CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL : Toujours afficher le repère, quelle que soit la collision, et masquer les repères ou libellés OPTIONAL_AND_HIDES_LOWER_PRIORITY qui le chevauchent.
  • CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY : Afficher le repère uniquement s'il n'en chevauche pas d'autres.

    • Si deux repères bitmap se chevauchent, celui dont le zIndex est le plus élevé s'affiche. S'ils ont le même zIndex, celui dont la position verticale à l'écran est la plus basse s'affiche. Pour en savoir plus sur le zIndex, consultez Z-index du repère.

    • Si deux repères de vue se chevauchent, celui dont le zIndex est le plus élevé s'affiche. S'ils ont le même zIndex, le repère créé en dernier chevauche tous ceux créés avant lui.

    • Comme les repères de vue sont dessinés sur un calque au-dessus des repères bitmap, les repères de vue chevauchent les repères bitmap. Pour optimiser le contrôle des collisions, vous devez donc essayer d'utiliser des repères du même type.

L'exemple suivant montre comment définir le comportement d'un repère en cas de collision :

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 = AdvancedMarkerOptions.CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL
val advancedMarkerOptions: AdvancedMarkerOptions = AdvancedMarkerOptions()
    .position(latLng)
    .collisionBehavior(collisionBehavior)
val marker: Marker = map.addMarker(advancedMarkerOptions)

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(latLng)
            .collisionBehavior(collisionBehavior);
Marker marker = map.addMarker(options);