Bja*_*sen 39 java events android google-maps zoom
我们正在构建一个使用google maps api for android的应用程序.
我有我的MapController和MapView,我启用了内置的缩放控件:
mapView.setBuiltInZoomControls(true);
Run Code Online (Sandbox Code Playgroud)
我现在想要在用户实际放大地图时获得一个事件,我该怎么做呢?我找不到这样的事件或任何我可以检测到缩放级别变化的一般事件.
更新
不推荐使用mapView.getZoomControls().文档建议使用mapView.setBuiltInZoomControls(bool).这没关系,但我根本无法弄清楚如何对内置缩放控件中的事件采取行动.
tar*_*lop 39
使用Google Maps Android API v2,您可以使用GoogleMap.OnCameraChangeListener,如下所示:
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
private float currentZoom = -1;
@Override
public void onCameraChange(CameraPosition pos) {
if (pos.zoom != currentZoom){
currentZoom = pos.zoom;
// do you action here
}
}
});
Run Code Online (Sandbox Code Playgroud)
Kur*_*rru 25
您可以实现自己的缩放值的基本"轮询",以检测何时使用Android 处理程序更改了缩放.
使用以下代码进行runnable事件.这是您应该进行处理的地方.
private Handler handler = new Handler();
public static final int zoomCheckingDelay = 500; // in ms
private Runnable zoomChecker = new Runnable()
{
public void run()
{
checkMapIcons();
handler.removeCallbacks(zoomChecker); // remove the old callback
handler.postDelayed(zoomChecker, zoomCheckingDelay); // register a new one
}
};
Run Code Online (Sandbox Code Playgroud)
使用启动回调事件
protected void onResume()
{
super.onResume();
handler.postDelayed(zoomChecker, zoomCheckingDelay);
}
Run Code Online (Sandbox Code Playgroud)
和停止它,当你使用离开活动
protected void onPause()
{
super.onPause();
handler.removeCallbacks(zoomChecker); // stop the map from updating
}
Run Code Online (Sandbox Code Playgroud)
正如OP所说,使用onUserInteractionEvent并自己进行测试.
这是一个干净的解决方案。只需将这个TouchOverlay私有类添加到您的活动中,然后将一个名为onZoom的方法(此内部类将其添加)即可。
注意,您必须将此TouchOverlay添加到您的mapView中,例如
mapView.getOverlays().add(new TouchOverlay());
Run Code Online (Sandbox Code Playgroud)
每当用户触摸地图时,它都会跟踪缩放级别,例如双击或缩小缩放,然后在缩放级别更改时触发onZoom方法(带有缩放级别)。
private class TouchOverlay extends com.google.android.maps.Overlay {
int lastZoomLevel = -1;
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapview) {
if (event.getAction() == 1) {
if (lastZoomLevel == -1)
lastZoomLevel = mapView.getZoomLevel();
if (mapView.getZoomLevel() != lastZoomLevel) {
onZoom(mapView.getZoomLevel());
lastZoomLevel = mapView.getZoomLevel();
}
}
return false;
}
}
public void onZoom(int level) {
reloadMapData(); //act on zoom level change event here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33846 次 |
| 最近记录: |