CircleState
CircleState gestiona la configuración y el comportamiento de las superposiciones circulares en el mapa. Proporciona propiedades reactivas para la posición central, el radio, el estilo y la configuración de interacción.
Constructor
Section titled “Constructor”CircleState( center: GeoPoint, radiusMeters: Double, clickable: Boolean = true, strokeColor: Color = Color.Red, strokeWidth: Dp = 1.dp, fillColor: Color = Color(red = 255, green = 255, blue = 255, alpha = 127), id: String? = null, zIndex: Int? = null, extra: Serializable? = null)Propiedades
Section titled “Propiedades”Propiedades básicas
Section titled “Propiedades básicas”id: String: Identificador único (se genera automáticamente si no se proporciona)center: GeoPoint: Centro geográfico del círculoradiusMeters: Double: Radio en metrosclickable: Boolean: Indica si el círculo responde a eventos de clicextra: Serializable?: Datos adicionales asociados al círculo
Propiedades visuales
Section titled “Propiedades visuales”strokeColor: Color: Color del bordestrokeWidth: Dp: Grosor del bordefillColor: Color: Color de relleno interiorzIndex: Int?: Orden de dibujo (los valores más altos se dibujan por encima)
Métodos
Section titled “Métodos”fun copy(...): CircleState // Crea una copia modificadafun fingerPrint(): CircleFingerPrint // Detección de cambiosfun asFlow(): Flow<CircleFingerPrint> // Actualizaciones reactivasEjemplos de uso
Section titled “Ejemplos de uso”Círculo básico
Section titled “Círculo básico”val circleState = CircleState( center = GeoPointImpl.fromLatLong(37.7749, -122.4194), radiusMeters = 1000.0, strokeColor = Color.Blue, fillColor = Color.Blue.copy(alpha = 0.3f))
// Sustituye MapView por el proveedor de mapas que prefieras, como GoogleMapView o MapboxMapViewMapView(state = mapViewState) { Circle(circleState)}Círculo interactivo
Section titled “Círculo interactivo”@Composablefun InteractiveCircleExample() { var circleState by remember { mutableStateOf( CircleState( center = GeoPointImpl.fromLatLong(37.7749, -122.4194), radiusMeters = 500.0, strokeColor = Color.Red, fillColor = Color.Red.copy(alpha = 0.2f), clickable = true ) ) }
Column { Slider( value = circleState.radiusMeters.toFloat(), onValueChange = { circleState = circleState.copy(radiusMeters = it.toDouble()) }, valueRange = 100f..2000f )
// Sustituye MapView por el proveedor de mapas que prefieras, como GoogleMapView o MapboxMapViewMapView( state = mapViewState, onCircleClick = { event -> println("Circle clicked at: ${event.clicked}") } ) { Circle(circleState) } }}Varios círculos con Z-Index
Section titled “Varios círculos con Z-Index”val circles = listOf( CircleState( center = GeoPointImpl.fromLatLong(37.7749, -122.4194), radiusMeters = 1000.0, fillColor = Color.Red.copy(alpha = 0.3f), zIndex = 1 ), CircleState( center = GeoPointImpl.fromLatLong(37.7749, -122.4194), radiusMeters = 500.0, fillColor = Color.Blue.copy(alpha = 0.5f), zIndex = 2 ))
// Sustituye MapView por el proveedor de mapas que prefieras, como GoogleMapView o MapboxMapViewMapView(state = mapViewState) { circles.forEach { circleState -> Circle(circleState) }}Manejo de eventos
Section titled “Manejo de eventos”Los eventos del círculo proporcionan tanto el estado como la posición del clic:
data class CircleEvent( val state: CircleState, val clicked: GeoPoint)
typealias OnCircleEventHandler = (CircleEvent) -> UnitBuenas prácticas
Section titled “Buenas prácticas”- Unidades de radio: Especifica siempre el radio en metros para mantener la coherencia.
- Alfa de color: Utiliza transparencia (canal alfa) para mejorar la visibilidad del mapa.
- Z-Index: Usa z-index para controlar la superposición de círculos.
- Rendimiento: Evita crear demasiados círculos grandes.
- Reactividad: Actualiza las propiedades directamente para permitir un renderizado eficiente.