我试图阻止用户移出谷歌地图中的某个区域。然而,似乎没有一种简单的方法可以做到这一点。第一次在这里问,请手下留情。
我尝试了以下方法,试图在用户滚动时进行轮询,但问题是 OnCameraChange 触发的频率不够高,因此它工作时不稳定且不准确。我知道一定有某种方法可以做到这一点,因为它看起来是一个简单而重要的功能。
private static final LatLng NEBOUND = new LatLng(47.670606, -117.393344);
private static final LatLng SWBOUND = new LatLng(47.661283, -117.411052);
private static final LatLngBounds MAPBOUNDARY = new LatLngBounds(SWBOUND, NEBOUND);
private LatLng lastCenter = new LatLng(47.667454, -117.402309);
private final OnCameraChangeListener mOnCameraChangeListener =
new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
LatLngBounds visibleBounds = guMap.getProjection().getVisibleRegion().latLngBounds;
if(!MAPBOUNDARY.contains(visibleBounds.northeast) || !MAPBOUNDARY.contains(visibleBounds.southwest)){
guMap.moveCamera(CameraUpdateFactory.newLatLng(lastCenter));
}
else
lastCenter = guMap.getCameraPosition().target;
centerLoc.setText(lastCenter.toString());
}
};
最佳答案
感谢 MaciejGórski 的帮助,我实现了该解决方案 即使 5 毫秒的轮询也相当不稳定,但它有效 请注意,根据边界的形状和用户屏幕的形状,他们可能无法缩小到足够远以查看整个区域。
private static final LatLng NEBOUND = new LatLng(47.671781, -117.393352);
private static final LatLng SWBOUND = new LatLng(47.661283, -117.411052);
private static final LatLngBounds MAPBOUNDARY = new LatLngBounds(SWBOUND, NEBOUND);
private LatLng lastCenter = new LatLng(47.667454, -117.402309);
GoogleMap guMap;
private Handler mHandler;
private void checkBoundaries(){
LatLng tempCenter = guMap.getCameraPosition().target;
LatLngBounds visibleBounds = guMap.getProjection().getVisibleRegion().latLngBounds;
if(!MAPBOUNDARY.contains(visibleBounds.northeast) || !MAPBOUNDARY.contains(visibleBounds.southwest)){
guMap.moveCamera(CameraUpdateFactory.newLatLng(lastCenter));
}
else
lastCenter = tempCenter;
}
private void setUpHandler(){
mHandler = new Handler(){
public void handleMessage(Message msg){
checkBoundaries();
sendEmptyMessageDelayed(0, 5);
}
};
}
关于java - 防止用户超出 map 边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16270863/