我已經擴展疊加並實施draw()
以便在地圖上繪製一些東西。 當通過mapController.zoomIn()
(在doubleTapping地圖時調用), 完成縮放時,疊加層會正確繪製到地圖上。放大MapView時奇怪的疊加繪製行爲
但是,無論何時使用內置縮放控制器放大/縮小,疊加層繪製不正確,需要平移地圖才能刷新疊加層。
我已經擴展疊加並實施draw()
以便在地圖上繪製一些東西。 當通過mapController.zoomIn()
(在doubleTapping地圖時調用), 完成縮放時,疊加層會正確繪製到地圖上。放大MapView時奇怪的疊加繪製行爲
但是,無論何時使用內置縮放控制器放大/縮小,疊加層繪製不正確,需要平移地圖才能刷新疊加層。
您可以使用變焦控制器擺脫這個問題的.. (例如:ZOOMVIEW =(LinearLayout中)mapView.getZoomControls();)
檢查該鏈接的
http://developer.android.com/reference/android/widget/ZoomButtonsController.html
mapView.setBuiltInZoomControls(true);
mapView.getController().setZoom(15);
controller = mapView.getController();
mapOverlays = mapView.getOverlays();
這個。
我一直在使用沒有問題的變焦控制器。 即使在地圖上繪製了多層圖片,放大/縮小也沒有任何不良影響。
我建議如下
mapController = mapView.getController();
mapController.zoomIn();// or .zoomOut()
,而不是使用setZoom使用(XX),請使用zoomIn()/縮小(ZoomOut)(),使變焦更加平滑,這可能有助於使其與多個疊加更好的ESP工作。
我在我的地圖視圖應用程序中發現我想跟蹤自己的位置,因此在代碼中我將地址設置爲當前的GPS位置,然後使用以下代碼將地圖中心移至該位置發現它奇妙的作品:
MapController mc = mapView.getController();
mc.animateTo(point);
你可以創造出變焦和動畫播放至覆蓋點的功能。希望有所幫助。
我在地圖視圖中創建了很多自定義繪圖。不幸的是,當縮小時(當它們應該縮小時),drawable擴展了。爲了解決這個問題,我監視了用戶在可運行中放大或縮小。如果變焦改變了,我重新繪製了地圖。這裏是我的代碼:
private Runnable zoomChecker = new Runnable()
{
public void run()
{
//check for updates
if((mLastUpdate>UPDATE_INTERVAL)&&(!DISPLAY_RED_CIRCLE)&&(!DISPLAY_ROUTE_LAYOUT)){
updateRouteInformation();
mLastUpdate = 0;
}else{
mLastUpdate += 200;
}
//check for zoom level changes
int testZoomLevel = mMapView.getZoomLevel();
if((testZoomLevel!=mZoomLevel)&&(DISPLAY_RED_CIRCLE)){
//set that user is zooming
mStillZooming = true;
//remove overlays and clear map
removeOverlayItems();
mMapView.invalidate();
//set zoom level as same
mZoomLevel = testZoomLevel;
}
if((testZoomLevel==mZoomLevel)&&(mStillZooming)){
displayDriverBoundaries(MAP_DRIVER);
}
handler.removeCallbacks(zoomChecker); // remove the old callback
handler.postDelayed(zoomChecker, zoomCheckingDelay); // register a new one
}
};
public class MyMap_MapControllerActivity extends MapActivity {
private MapView mapView;
//private MapController mapController;
MapView.LayoutParams lp;
int y = 10;
int x = 10;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.map_view);
mapView.setSatellite(true);
mapView.setStreetView(true);
mapView.setTraffic(true);
GeoPoint center = mapView.getMapCenter();
int latSpan = mapView.getLatitudeSpan();
int longSpan = mapView.getLongitudeSpan();
lp = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,
MapView.LayoutParams.WRAP_CONTENT,
x, y,
MapView.LayoutParams.TOP_LEFT);
View zoomControls = mapView.getZoomControls();
mapView.addView(zoomControls, lp);
mapView.displayZoomControls(true);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
你(或其他人)找到一個解決的辦法?幾個月來一直在推動着我。 – 2010-08-07 06:13:43
我發現的解決方法是僅在地圖放大500毫秒後才刷新地圖,這樣疊加層在地圖放大後繪製。我用Handler.postDelayed()添加事件。希望這可以幫助 – Itsik 2010-08-07 21:27:42
我一直在使用MapView相當一段時間,沒有注意到這個問題。如果可能,請發佈您的代碼/流程以更好地理解邏輯。 – arcamax 2011-05-30 18:57:53