Commit 4e467747 authored by Qiu Xiang's avatar Qiu Xiang

添加 polyline onPress 事件接口

parent c6355cc1
package cn.qiuxiang.react.amap3d;
import android.content.Context;
import android.annotation.SuppressLint;
import com.amap.api.maps.AMap;
import com.amap.api.maps.model.LatLng;
......@@ -8,10 +8,14 @@ import com.amap.api.maps.model.Polyline;
import com.amap.api.maps.model.PolylineOptions;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.events.RCTEventEmitter;
import com.facebook.react.views.view.ReactViewGroup;
import java.util.ArrayList;
@SuppressLint("ViewConstructor")
public class AMapPolyline extends ReactViewGroup {
private ArrayList<LatLng> coordinates;
private Polyline polyline;
......@@ -23,9 +27,11 @@ public class AMapPolyline extends ReactViewGroup {
private float opacity;
private ArrayList<Integer> colors;
private boolean gradient;
private RCTEventEmitter eventEmitter;
public AMapPolyline(Context context) {
public AMapPolyline(ThemedReactContext context) {
super(context);
eventEmitter = context.getJSModule(RCTEventEmitter.class);
}
public void setCoordinates(ReadableArray coordinates) {
......@@ -110,4 +116,8 @@ public class AMapPolyline extends ReactViewGroup {
public String getPolylineId() {
return polyline.getId();
}
public void sendEvent(String name, WritableMap data) {
eventEmitter.receiveEvent(getId(), name, data);
}
}
package cn.qiuxiang.react.amap3d;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.common.MapBuilder;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewGroupManager;
import com.facebook.react.uimanager.annotations.ReactProp;
import java.util.HashMap;
import java.util.Map;
class AMapPolylineManager extends ViewGroupManager<AMapPolyline> {
@Override
public String getName() {
......@@ -16,6 +20,13 @@ class AMapPolylineManager extends ViewGroupManager<AMapPolyline> {
return new AMapPolyline(reactContext);
}
@Override
public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
HashMap<String, Object> map = new HashMap<>();
map.put("onPolylineClick", MapBuilder.of("registrationName", "onPolylineClick"));
return map;
}
@ReactProp(name = "coordinates")
public void setCoordinate(AMapPolyline polyline, ReadableArray coordinates) {
polyline.setCoordinates(coordinates);
......
......@@ -14,6 +14,7 @@ import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.maps.model.Polyline;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.ThemedReactContext;
......@@ -145,6 +146,13 @@ public class AMapView extends MapView {
return layout;
}
});
map.setOnPolylineClickListener(new AMap.OnPolylineClickListener() {
@Override
public void onPolylineClick(Polyline polyline) {
polylines.get(polyline.getId()).sendEvent("onPolylineClick", Arguments.createMap());
}
});
}
private static float pxFromDp(Context context, float dp) {
......
......@@ -34,6 +34,11 @@ class Polyline extends Component {
* 是否绘制虚线
*/
dottedLine: PropTypes.bool,
/**
* 点击事件
*/
onPress: PropTypes.func,
}
static defaultProps = {
......@@ -43,11 +48,20 @@ class Polyline extends Component {
opacity: 1,
}
_handle(name) {
return event => {
if (this.props[name]) {
this.props[name](event)
}
}
}
render() {
const props = {
...this.props,
width: PixelRatio.getPixelSizeForLayoutSize(this.props.width),
colors: this.props.colors.map(processColor),
onPolylineClick: this._handle('onPress'),
}
return <AMapPolyline {...props}/>
}
......
import React, {Component} from 'react'
import {StyleSheet} from 'react-native'
import {StyleSheet, Alert} from 'react-native'
import {MapView, Polyline} from 'react-native-amap3d'
export default class PolylineExample extends Component {
......@@ -52,6 +52,7 @@ export default class PolylineExample extends Component {
width={5}
color='blue'
colors={['#f44336', '#2196f3', '#4caf50']}
onPress={() => Alert.alert('onPress')}
coordinates={[
{
latitude: 39.906901,
......
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