Commit 9a6deb84 authored by Qiu Xiang's avatar Qiu Xiang

添加地图动画移动接口

parent 5a6b4ecf
...@@ -2,14 +2,16 @@ package cn.qiuxiang.react.amap3d ...@@ -2,14 +2,16 @@ package cn.qiuxiang.react.amap3d
import android.view.View import android.view.View
import com.amap.api.maps.AMap import com.amap.api.maps.AMap
import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.MapView import com.amap.api.maps.MapView
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.Marker import com.amap.api.maps.model.Marker
import com.amap.api.maps.model.MyLocationStyle import com.amap.api.maps.model.MyLocationStyle
import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.bridge.WritableMap 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.uimanager.events.RCTEventEmitter
import com.facebook.react.views.view.ReactViewGroup
class AMapView(context: ThemedReactContext) : MapView(context) { class AMapView(context: ThemedReactContext) : MapView(context) {
private val eventEmitter: RCTEventEmitter = context.getJSModule(RCTEventEmitter::class.java) private val eventEmitter: RCTEventEmitter = context.getJSModule(RCTEventEmitter::class.java)
...@@ -120,4 +122,28 @@ class AMapView(context: ThemedReactContext) : MapView(context) { ...@@ -120,4 +122,28 @@ class AMapView(context: ThemedReactContext) : MapView(context) {
} }
} }
} }
val animateCallback = object: AMap.CancelableCallback {
override fun onCancel() {
TODO("not implemented")
}
override fun onFinish() {
TODO("not implemented")
}
}
fun animateToCoordinate(args: ReadableArray?) {
val coordinate = args?.getMap(0)!!
val duration = args.getInt(1)
val cameraUpdate = CameraUpdateFactory.newLatLng(LatLng(
coordinate.getDouble("latitude"), coordinate.getDouble("longitude")))
map.animateCamera(cameraUpdate, duration.toLong(), animateCallback)
}
fun animateToZoomLevel(args: ReadableArray?) {
val zoomLevel = args?.getDouble(0)!!
val duration = args.getInt(1)
map.animateCamera(CameraUpdateFactory.zoomTo(zoomLevel.toFloat()), duration.toLong(), animateCallback)
}
} }
...@@ -4,12 +4,18 @@ import android.view.View ...@@ -4,12 +4,18 @@ import android.view.View
import com.amap.api.maps.AMap import com.amap.api.maps.AMap
import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.LatLng
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.ReadableMap
import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.ViewGroupManager import com.facebook.react.uimanager.ViewGroupManager
import com.facebook.react.uimanager.annotations.ReactProp import com.facebook.react.uimanager.annotations.ReactProp
internal class AMapViewManager : ViewGroupManager<AMapView>() { internal class AMapViewManager : ViewGroupManager<AMapView>() {
companion object {
val ANIMATE_TO_COORDINATE = 1
val ANIMATE_TO_ZOOM_LEVEL = 2
}
override fun getName(): String { override fun getName(): String {
return "AMapView" return "AMapView"
} }
...@@ -18,6 +24,19 @@ internal class AMapViewManager : ViewGroupManager<AMapView>() { ...@@ -18,6 +24,19 @@ internal class AMapViewManager : ViewGroupManager<AMapView>() {
return AMapView(reactContext) return AMapView(reactContext)
} }
override fun getCommandsMap(): Map<String, Int> {
return mapOf(
"animateToCoordinate" to ANIMATE_TO_COORDINATE,
"animateToZoomLevel" to ANIMATE_TO_ZOOM_LEVEL)
}
override fun receiveCommand(overlay: AMapView, commandId: Int, args: ReadableArray?) {
when (commandId) {
ANIMATE_TO_COORDINATE -> overlay.animateToCoordinate(args)
ANIMATE_TO_ZOOM_LEVEL -> overlay.animateToZoomLevel(args)
}
}
override fun addView(mapView: AMapView, child: View, index: Int) { override fun addView(mapView: AMapView, child: View, index: Int) {
super.addView(mapView, child, index) super.addView(mapView, child, index)
when (child) { when (child) {
......
import React, {PropTypes, Component} from 'react' import React, {PropTypes, Component} from 'react'
import {requireNativeComponent, View} from 'react-native' import {
requireNativeComponent,
findNodeHandle,
View,
UIManager,
} from 'react-native'
import Marker from './Marker' import Marker from './Marker'
import InfoWindow from './InfoWindow' import InfoWindow from './InfoWindow'
import Overlay from './Overlay' import Overlay from './Overlay'
...@@ -142,6 +147,22 @@ class MapView extends Component { ...@@ -142,6 +147,22 @@ class MapView extends Component {
onLocation: React.PropTypes.func, onLocation: React.PropTypes.func,
} }
animateToCoordinate(coordinate, duration = 1000) {
this._sendCommand('animateToCoordinate', [coordinate, duration])
}
animateToZoomLevel(zoomLevel, duration = 1000) {
this._sendCommand('animateToZoomLevel', [zoomLevel, duration])
}
_sendCommand(command, params = null) {
UIManager.dispatchViewManagerCommand(
findNodeHandle(this),
UIManager.AMapView.Commands[command],
params,
)
}
render() { render() {
return <AMapView {...this.props}/> return <AMapView {...this.props}/>
} }
......
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