【问题标题】:How can change marker position in react native maps?如何更改反应原生地图中的标记位置?
【发布时间】:2020-02-24 08:59:16
【问题描述】:

您好,我想在地图上添加一个可拖动的标记“根据地图视图更改标记的位置” 所以我使用 react-native-maps,

当用户滑动地图并更改他的位置时,标记跟随下摆,因此在我的代码中我将它记录在控制台中,但我在日志中看不到任何内容,或者它不是以这种方式制作的! 如何让它在地图上可拖动?

这就是我想要实现的目标

这是我的代码

import React, {Component} from 'react';
import {StyleSheet, View} from 'react-native';
import MapView, {Marker} from 'react-native-maps';

// create a component
class App extends Component {
  state = {
    latlng: {
      latitude: 35.1790507,
      longitude: -6.1389008,
    },
  };
  render() {
    return (
      <View style={styles.container}>
        <MapView
          style={styles.map}
          region={{
            latitude: 35.1790507,
            longitude: -6.1389008,
            latitudeDelta: 0.015,
            longitudeDelta: 0.0121,
          }}>
          <Marker
            draggable
            coordinate={this.state.latlng}
            title="Home"
            onDragEnd={e => {
              console.log('dragEnd', e.nativeEvent.coordinate);
            }}
          />
        </MapView>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    ...StyleSheet.absoluteFillObject,
    // height: 400,
    // width: 400,
    justifyContent: 'flex-end',
    alignItems: 'center',
  },
  map: {
    ...StyleSheet.absoluteFillObject,
  },
});

//make this component available to the app
export default App;

【问题讨论】:

    标签: javascript reactjs react-native react-native-android react-native-maps


    【解决方案1】:

    您可以使用MapViewonRegionChangeComplete 属性来实现此目的。

    首先,像下面这样改变状态对象:

    state = {
        markerData: {
          latitude: 35.1790507,
          longitude: -6.1389008,
        },
        mapData: {
          latitude: 35.1790507,
          longitude: -6.1389008,
          latitudeDelta: 0.015,
          longitudeDelta: 0.0121,
        },
      };
    

    相应地更改您的MapView

    <MapView
         style={{flex: 1}}
         region={this.state.mapData}
         onRegionChangeComplete={this.handleRegionChange}>
         <Marker
            coordinate={this.state.markerData}
            title="Home"
            onDragEnd={e => {
                  console.log('dragEnd', e.nativeEvent.coordinate);
                }}
          />
    </MapView>
    

    然后定义一个处理函数,当用户在地图上拖动时改变状态值:

    handleRegionChange = mapData => {
        this.setState({
          markerData: {latitude: mapData.latitude, longitude: mapData.longitude},
          mapData,
        });
      };
    

    希望这会有所帮助。

    【讨论】:

    • 太棒了!!如果我想为标记添加一些流畅的动画,那就行了:D,因为它可以快速地从一个姿势导航到另一个姿势
    • Marker 有一个方法叫animateMarkerToCoordinate,但不幸的是,它只适用于 Android。
    • 是的,我的目标现在是 android ,我如何用你的代码处理它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多