Skip to content

Commit 1e6d8e0

Browse files
committed
Android: Use ViewGroupManager to Manage MapView
1 parent 887a82e commit 1e6d8e0

File tree

6 files changed

+60
-15
lines changed

6 files changed

+60
-15
lines changed

android/src/main/java/org/lovebing/reactnative/baidumap/BaiduMapModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.baidu.mapapi.map.BaiduMap;
1111
import com.baidu.mapapi.map.BitmapDescriptor;
1212
import com.baidu.mapapi.map.BitmapDescriptorFactory;
13+
import com.baidu.mapapi.map.Marker;
1314
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
1415
import com.facebook.react.bridge.Arguments;
1516
import com.facebook.react.bridge.ReactContextBaseJavaModule;
@@ -50,6 +51,8 @@ public class BaiduMapModule extends ReactContextBaseJavaModule {
5051

5152
private LocationClient locationClient;
5253

54+
private Marker marker;
55+
5356
public BaiduMapModule(ReactApplicationContext reactContext) {
5457
super(reactContext);
5558
context = reactContext;
@@ -61,12 +64,15 @@ public String getName() {
6164

6265
@ReactMethod
6366
public void setMarker(double latitude, double longitude) {
67+
if(marker != null) {
68+
marker.remove();
69+
}
6470
LatLng point = new LatLng(latitude, longitude);
6571
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
6672
OverlayOptions option = new MarkerOptions()
6773
.icon(bitmap)
6874
.position(point);
69-
getMap().addOverlay(option);
75+
marker = (Marker)getMap().addOverlay(option);
7076
}
7177

7278
@ReactMethod

android/src/main/java/org/lovebing/reactnative/baidumap/BaiduMapViewManager.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.lovebing.reactnative.baidumap;
22

33
import android.content.Context;
4+
import android.graphics.Point;
5+
import android.os.Handler;
46
import android.support.annotation.Nullable;
57
import android.util.Log;
8+
import android.view.View;
9+
import android.view.ViewGroup;
610

711
import com.baidu.mapapi.map.BaiduMap;
812
import com.baidu.mapapi.map.MapPoi;
@@ -11,26 +15,31 @@
1115
import com.baidu.mapapi.map.MapStatusUpdateFactory;
1216
import com.baidu.mapapi.map.MapView;
1317
import com.baidu.mapapi.SDKInitializer;
18+
import com.baidu.mapapi.map.MapViewLayoutParams;
1419
import com.baidu.mapapi.map.Marker;
1520
import com.baidu.mapapi.model.LatLng;
1621
import com.facebook.react.bridge.Arguments;
22+
import com.facebook.react.bridge.ReadableArray;
23+
import com.facebook.react.bridge.ReadableMap;
1724
import com.facebook.react.bridge.WritableMap;
18-
import com.facebook.react.modules.core.DeviceEventManagerModule;
1925
import com.facebook.react.uimanager.SimpleViewManager;
2026
import com.facebook.react.uimanager.ThemedReactContext;
27+
import com.facebook.react.uimanager.ViewGroupManager;
2128
import com.facebook.react.uimanager.annotations.ReactProp;
2229
import com.facebook.react.uimanager.events.RCTEventEmitter;
2330

2431
/**
2532
* Created by lovebing on 12/20/2015.
2633
*/
27-
public class BaiduMapViewManager extends SimpleViewManager<MapView> {
34+
public class BaiduMapViewManager extends ViewGroupManager<MapView> {
2835

2936
private static final String REACT_CLASS = "RCTBaiduMapView";
3037

3138
private static MapView mMapView;
3239
private ThemedReactContext mReactContext;
3340

41+
private ReadableArray childrenPoints;
42+
3443
public String getName() {
3544
return REACT_CLASS;
3645
}
@@ -52,6 +61,24 @@ public MapView createViewInstance(ThemedReactContext context) {
5261
return mMapView;
5362
}
5463

64+
@Override
65+
public void addView(MapView parent, View child, int index) {
66+
if(childrenPoints != null) {
67+
Point point = new Point();
68+
ReadableArray item = childrenPoints.getArray(index);
69+
if(item != null) {
70+
point.set(item.getInt(0), item.getInt(1));
71+
MapViewLayoutParams mapViewLayoutParams = new MapViewLayoutParams
72+
.Builder()
73+
.layoutMode(MapViewLayoutParams.ELayoutMode.absoluteMode)
74+
.point(point)
75+
.build();
76+
parent.addView(child, mapViewLayoutParams);
77+
}
78+
}
79+
80+
}
81+
5582
@ReactProp(name = "zoomControlsVisible")
5683
public void setZoomControlsVisible(MapView mapView, boolean zoomControlsVisible) {
5784
mapView.showZoomControls(zoomControlsVisible);
@@ -69,6 +96,11 @@ public void setZoom(MapView mapView, float zoom) {
6996
mapView.getMap().setMapStatus(mapStatusUpdate);
7097
}
7198

99+
@ReactProp(name = "childrenPoints")
100+
public void setChildrenPoints(MapView mapView, ReadableArray childrenPoints) {
101+
this.childrenPoints = childrenPoints;
102+
}
103+
72104
/**
73105
*
74106
* @param mapView

demo/BaiduMapDemo.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,16 @@ export default class BaiduMapDemo extends Component {
6161
return (
6262
<View style={styles.container}>
6363
<MapView
64+
childrenPoints={[[330, 50], [580, 200]]}
6465
zoom={this.zoom}
6566
style={styles.map}
6667
onMapClick={(e) => {
67-
6868
}}
69-
/>
69+
>
70+
<Text style={{color: 'red', backgroundColor: null, width: Dimensions.get('window').width}}>ViewGroup is not allowed (Android)</Text>
71+
<Text style={{color: 'black', width: Dimensions.get('window').width}}>This is not a good idea to add children view to Baidu MapView</Text>
72+
</MapView>
73+
7074
<View style={styles.row}>
7175
<Buttton label="普通地图" onPress={() => {
7276
MapModule.setMapType(MapTypes.NORMAL);
@@ -108,7 +112,8 @@ export default class BaiduMapDemo extends Component {
108112

109113
const styles = StyleSheet.create({
110114
row: {
111-
flexDirection: 'row'
115+
flexDirection: 'row',
116+
justifyContent: 'flex-start'
112117
},
113118
btn: {
114119
height: 48,

demo/android/app/app.iml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,6 @@
6464
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
6565
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
6666
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
67-
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
68-
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
69-
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
70-
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
71-
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
72-
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
73-
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
74-
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
7567
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
7668
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
7769
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -80,6 +72,14 @@
8072
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
8173
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
8274
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
75+
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
76+
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
77+
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
78+
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
79+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
80+
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
81+
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
82+
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
8383
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
8484
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
8585
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />

index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export class MapView extends Component {
2323
zoomControlsVisible: PropTypes.bool,
2424
mapType: PropTypes.number,
2525
zoom: PropTypes.number,
26+
childrenPoints: PropTypes.array,
2627
onMapStatusChangeStart: PropTypes.func,
2728
onMapStatusChange: PropTypes.func,
2829
onMapStatusChangeFinish: PropTypes.func,
@@ -34,7 +35,8 @@ export class MapView extends Component {
3435

3536
static defaultProps = {
3637
zoomControlsVisible: true,
37-
mapType: MapTypes.NORMAL
38+
mapType: MapTypes.NORMAL,
39+
childrenPoints: []
3840
};
3941

4042
constructor() {

0 commit comments

Comments
 (0)