Commit 57b246fe authored by Qiu Xiang's avatar Qiu Xiang

优化事件处理

parent 48e84d00
...@@ -4,9 +4,7 @@ import android.graphics.Bitmap ...@@ -4,9 +4,7 @@ import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
import com.amap.api.maps.AMap import com.amap.api.maps.AMap
import com.amap.api.maps.model.* import com.amap.api.maps.model.*
import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.events.RCTEventEmitter
import com.facebook.react.views.view.ReactViewGroup import com.facebook.react.views.view.ReactViewGroup
class AMapMarker(context: ThemedReactContext) : ReactViewGroup(context) { class AMapMarker(context: ThemedReactContext) : ReactViewGroup(context) {
...@@ -78,7 +76,6 @@ class AMapMarker(context: ThemedReactContext) : ReactViewGroup(context) { ...@@ -78,7 +76,6 @@ class AMapMarker(context: ThemedReactContext) : ReactViewGroup(context) {
} }
private var bitmapDescriptor: BitmapDescriptor? = null private var bitmapDescriptor: BitmapDescriptor? = null
private val eventEmitter: RCTEventEmitter = context.getJSModule(RCTEventEmitter::class.java)
fun addToMap(map: AMap) { fun addToMap(map: AMap) {
marker = map.addMarker(MarkerOptions() marker = map.addMarker(MarkerOptions()
...@@ -119,8 +116,4 @@ class AMapMarker(context: ThemedReactContext) : ReactViewGroup(context) { ...@@ -119,8 +116,4 @@ class AMapMarker(context: ThemedReactContext) : ReactViewGroup(context) {
bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap) bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap)
marker?.setIcon(bitmapDescriptor) marker?.setIcon(bitmapDescriptor)
} }
fun sendEvent(name: String, data: WritableMap) {
eventEmitter.receiveEvent(id, name, data)
}
} }
...@@ -6,9 +6,7 @@ import com.amap.api.maps.model.LatLng ...@@ -6,9 +6,7 @@ import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Polyline import com.amap.api.maps.model.Polyline
import com.amap.api.maps.model.PolylineOptions import com.amap.api.maps.model.PolylineOptions
import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.ReadableArray
import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.events.RCTEventEmitter
import com.facebook.react.views.view.ReactViewGroup import com.facebook.react.views.view.ReactViewGroup
class AMapPolyline(context: ThemedReactContext) : ReactViewGroup(context) { class AMapPolyline(context: ThemedReactContext) : ReactViewGroup(context) {
...@@ -55,7 +53,6 @@ class AMapPolyline(context: ThemedReactContext) : ReactViewGroup(context) { ...@@ -55,7 +53,6 @@ class AMapPolyline(context: ThemedReactContext) : ReactViewGroup(context) {
private var coordinates: ArrayList<LatLng> = ArrayList() private var coordinates: ArrayList<LatLng> = ArrayList()
private var colors: ArrayList<Int> = ArrayList() private var colors: ArrayList<Int> = ArrayList()
private val eventEmitter: RCTEventEmitter = context.getJSModule(RCTEventEmitter::class.java)
fun setCoordinates(coordinates: ReadableArray) { fun setCoordinates(coordinates: ReadableArray) {
this.coordinates = ArrayList((0..coordinates.size() - 1) this.coordinates = ArrayList((0..coordinates.size() - 1)
...@@ -81,8 +78,4 @@ class AMapPolyline(context: ThemedReactContext) : ReactViewGroup(context) { ...@@ -81,8 +78,4 @@ class AMapPolyline(context: ThemedReactContext) : ReactViewGroup(context) {
.transparency(opacity) .transparency(opacity)
.zIndex(zIndex)) .zIndex(zIndex))
} }
fun sendEvent(name: String, data: WritableMap) {
eventEmitter.receiveEvent(id, name, data)
}
} }
...@@ -23,21 +23,21 @@ class AMapView(context: ThemedReactContext) : MapView(context) { ...@@ -23,21 +23,21 @@ class AMapView(context: ThemedReactContext) : MapView(context) {
map.myLocationStyle = locationStyle map.myLocationStyle = locationStyle
map.setOnMapLoadedListener { map.setOnMapLoadedListener {
sendEvent("onMapLoaded", Arguments.createMap()) emit(id, "onMapLoaded")
} }
map.setOnMapClickListener { latLng -> map.setOnMapClickListener { latLng ->
val event = Arguments.createMap() val event = Arguments.createMap()
event.putDouble("latitude", latLng.latitude) event.putDouble("latitude", latLng.latitude)
event.putDouble("longitude", latLng.longitude) event.putDouble("longitude", latLng.longitude)
sendEvent("onMapClick", event) emit(id, "onMapClick")
} }
map.setOnMapLongClickListener { latLng -> map.setOnMapLongClickListener { latLng ->
val event = Arguments.createMap() val event = Arguments.createMap()
event.putDouble("latitude", latLng.latitude) event.putDouble("latitude", latLng.latitude)
event.putDouble("longitude", latLng.longitude) event.putDouble("longitude", latLng.longitude)
sendEvent("onMapLongClick", event) emit(id, "onMapLongClick", event)
} }
map.setOnMyLocationChangeListener { location -> map.setOnMyLocationChangeListener { location ->
...@@ -45,21 +45,21 @@ class AMapView(context: ThemedReactContext) : MapView(context) { ...@@ -45,21 +45,21 @@ class AMapView(context: ThemedReactContext) : MapView(context) {
event.putDouble("latitude", location.latitude) event.putDouble("latitude", location.latitude)
event.putDouble("longitude", location.longitude) event.putDouble("longitude", location.longitude)
event.putDouble("accuracy", location.accuracy.toDouble()) event.putDouble("accuracy", location.accuracy.toDouble())
sendEvent("onLocationChange", event) emit(id, "onLocationChange")
} }
map.setOnMarkerClickListener { marker -> map.setOnMarkerClickListener { marker ->
markers[marker.id]?.sendEvent("onMarkerClick", Arguments.createMap()) emit(markers[marker.id]?.id, "onMarkerClick")
false false
} }
map.setOnMarkerDragListener(object : AMap.OnMarkerDragListener { map.setOnMarkerDragListener(object : AMap.OnMarkerDragListener {
override fun onMarkerDragStart(marker: Marker) { override fun onMarkerDragStart(marker: Marker) {
markers[marker.id]?.sendEvent("onMarkerDragStart", Arguments.createMap()) emit(markers[marker.id]?.id, "onMarkerDragStart")
} }
override fun onMarkerDrag(marker: Marker) { override fun onMarkerDrag(marker: Marker) {
markers[marker.id]?.sendEvent("onMarkerDrag", Arguments.createMap()) emit(markers[marker.id]?.id, "onMarkerDrag")
} }
override fun onMarkerDragEnd(marker: Marker) { override fun onMarkerDragEnd(marker: Marker) {
...@@ -67,16 +67,16 @@ class AMapView(context: ThemedReactContext) : MapView(context) { ...@@ -67,16 +67,16 @@ class AMapView(context: ThemedReactContext) : MapView(context) {
val data = Arguments.createMap() val data = Arguments.createMap()
data.putDouble("latitude", position.latitude) data.putDouble("latitude", position.latitude)
data.putDouble("longitude", position.longitude) data.putDouble("longitude", position.longitude)
markers[marker.id]?.sendEvent("onMarkerDragEnd", data) emit(markers[marker.id]?.id, "onMarkerDragEnd", data)
} }
}) })
map.setOnInfoWindowClickListener { marker -> map.setOnInfoWindowClickListener { marker ->
markers[marker.id]?.sendEvent("onInfoWindowClick", Arguments.createMap()) emit(markers[marker.id]?.id, "onInfoWindowClick")
} }
map.setOnPolylineClickListener { polyline -> map.setOnPolylineClickListener { polyline ->
polylines[polyline.id]?.sendEvent("onPolylineClick", Arguments.createMap()) emit(polylines[polyline.id]?.id, "onPolylineClick")
} }
map.setInfoWindowAdapter(AMapInfoWindowAdapter(context, markers)) map.setInfoWindowAdapter(AMapInfoWindowAdapter(context, markers))
...@@ -92,7 +92,7 @@ class AMapView(context: ThemedReactContext) : MapView(context) { ...@@ -92,7 +92,7 @@ class AMapView(context: ThemedReactContext) : MapView(context) {
polylines.put(polyline.polyline?.id!!, polyline) polylines.put(polyline.polyline?.id!!, polyline)
} }
fun sendEvent(name: String, data: WritableMap) { fun emit(id: Int?, name: String, data: WritableMap = Arguments.createMap()) {
eventEmitter.receiveEvent(id, name, data) id?.let { eventEmitter.receiveEvent(it, name, data) }
} }
} }
...@@ -11,5 +11,5 @@ class LayoutNode : LayoutShadowNode() { ...@@ -11,5 +11,5 @@ class LayoutNode : LayoutShadowNode() {
layoutHeight.toInt())) layoutHeight.toInt()))
} }
class Layout(var width: Int, var height: Int) data class Layout(var width: Int, var height: Int)
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment