इसलिए मैंने एक समाधान बनाया जो ठीक होना चाहिए। यदि उपयोगकर्ता -180/180 सीमा में मानचित्र को पैन करता है, तो नक्शा दूसरी ओर फ़्लिप करेगा। तो नक्शा लपेटना अभी भी संभव है, लेकिन "खतरनाक" क्षेत्र कभी प्रदर्शित नहीं होता है।
public class CustomMapView extends MapView {
private double prevLongitude;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean retVal = correctCamera();
prevLongitude = getMap().getCameraPosition().target.longitude;
return retVal;
}
public boolean correctCamera() {
if (getMap().getProjection().getVisibleRegion().latLngBounds.northeast.longitude < getMap().getProjection().getVisibleRegion().latLngBounds.southwest.longitude) {
double diff = getMap().getProjection().getVisibleRegion().latLngBounds.southwest.longitude - getMap().getProjection().getVisibleRegion().latLngBounds.northeast.longitude;
double longitudeSW;
double longitudeNE;
double longitudeDiff = (360-diff)/25;
// use > 0 if you want the map to jump to the other side
// <= 0 will cause the map to flip back
if (prevLongitude > 0) {
longitudeSW = -180 + longitudeDiff;
longitudeNE = -180 + longitudeDiff - diff;
} else {
longitudeSW = 180 - longitudeDiff + diff;
longitudeNE = 180 - longitudeDiff;
}
LatLngBounds bounds = new LatLngBounds(
new LatLng(getMap().getCameraPosition().target.latitude, longitudeSW),
new LatLng(getMap().getCameraPosition().target.latitude, longitudeNE)
);
getMap().animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 0));
return true;
}
return false;
}
}
और एक्सएमएल:
<com.ieffects.clustermap.CustomMapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
और GoogleMap के लिए (mapView.getMap()):
map.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
mapView.correctCamera();
}
});
यह
मैं एक कस्टम MapView बनाने के लिए किया था यदि उपयोगकर्ता खतरनाक क्षेत्र में मानचित्र "फ्लाई" करने देता है तो इसकी आवश्यकता होती है।
स्रोत
2013-01-28 14:53:49
लेकिन यह जेएस में है ?? –