自定义 MyPositionIcon On Tap 创建自定义 MyPositionMarker 的副本



我正在尝试用我自己的函数替换mMpap.SetMyPosition(true);函数。我在这方面取得了一些成功,当点击"我的位置图标"的自定义图像时,它会使用我的自定义标记将相机移动到当前位置。

一切都运行良好,除了每当点击"我的位置图标"时,它会在该位置留下标记的副本,并使用新标记移动到当前位置。

我是Android开发的新手,正在寻求一些帮助。

我在onCreate(Bundle savedInstanceState)中的代码是:

ImageView img = (ImageView) findViewById(R.id.myPostionButton);
img.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
getTheLocation();
}
});

getTheLocation()是:

if (location != null) {
final double latitude = location.getLatitude();
final double longitude = location.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
final Marker marker = mMap.addMarker(
new MarkerOptions()
.position(new LatLng(latitude, longitude))
.draggable(true)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_marker)));
mMap.setTrafficEnabled(true);
mMap.setMinZoomPreference(10.0f);
mMap.setMaxZoomPreference(20.0f);
//mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16.0f),4000 , null);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16.0f));
mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
LatLng centerOfMap = mMap.getCameraPosition().target;
marker.setPosition(centerOfMap);
}
});
mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
LatLng centerOfMap = mMap.getCameraPosition().target;
marker.setPosition(centerOfMap);
double latitude = centerOfMap.latitude;
double longitude = centerOfMap.longitude;
Geocoder geocoder = new Geocoder(getApplicationContext());
try {
List<Address> addressList = geocoder.getFromLocation(latitude, longitude, 1);
String str = addressList.get(0).getAddressLine(0) + ", ";
str += addressList.get(0).getSubLocality() + ", ";
str += addressList.get(0).getLocality() + ", ";
str += addressList.get(0).getCountryCode();
mFromAddress.setText(str);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}

onMapReady(GoogleMap googleMap)是:

mMap = googleMap;
getTheLocation();

请帮忙。

您可以根据自己的情况尝试以下任一方法:

1. 如果地图中只有一个标记,在添加新标记之前,请使用mMap.clear();清除地图

2.如果您有多个标记,则必须将当前标记对象保留为成员变量mMarker。然后,在添加新标记之前,您可以使用mMarker.remove();.

最新更新