2012-01-04 55 views
4

我的GoogleMap API for Android組件MyLocationOverlay出現問題。我希望每次設備位置更改(並且用戶位置離開可見部分或地圖)時關閉MyLocationOverlay自動重新接收功能(到當前用戶位置)。關閉MyLocationOverlay組件中的自動重新註冊功能

似乎沒有標誌關閉不需要的地圖自動中心功能,當用戶位置超出屏幕的

例如

public class LocationTest extends MapActivity{ 

    private MapView map; 
    private MapController controller; 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    map = (MapView) findViewById(R.id.map); 
    final MyLocationOverlayUpdate overlay = new MyLocationOverlayUpdate(this, map); 
    overlay.enableMyLocation(); 
    map.getOverlays().add(overlay); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
    return false; 
    } 
} 

public class MyLocationOverlayUpdate extends MyLocationOverlay { 

    public MyLocationOverlayUpdate(Context context, MapView mapView) { 
    super(context, mapView); 
    } 

    public void drawMyLocation(Canvas canvas, MapView mapView, 
       Location location, GeoPoint geoPoint, long when) {} 
} 

我通過網絡看了這個問題,但沒有找到解決方案。

找到附加信息:

  • 我想這文件是錯誤的,越野車,或只是過時的說法:

    可選的,構造函數也可以採取MapController,並用它來保持 通過平移地圖時可以看到「我的位置」點,當它離開屏幕時

因爲沒有構造函數接受MapController作爲參數,並且似乎我沒有keeping the "my location" dot visible或沒有選擇。

  • 我不期而遇發現一種解決方法通過與到super.drawMyLocation沒有呼叫()解決recentering地圖(不期望的「特徵」關閉)的問題重寫方法drawMyLocation()。但是我必須重新實現drawMyLocation()方法,因此更改默認appearence(和花費時間......)

也許有一個更明確的解決方案嗎?

+0

您可以發佈您的解決方案作爲對本文的答覆 – HitOdessit 2012-11-01 15:34:37

回答

0

擴展MyLocationOverlay類並通過覆蓋drawMyLocation方法來重新實現覆蓋動畫。

public class CustomMyLocationOverlay extends MyLocationOverlay { 

    private static final String TAG = "Bankomatai"; 


    private Drawable[] slips; 
    private final MapView mapView; 
    private int currSlip = 0; 
    private Location savedFix = null; 
    Point point = new Point(); 
    Rect rect = new Rect(); 
    private Handler handler = new Handler(); 
    private Runnable overlayAnimationTask; 


    public CustomMyLocationOverlay(Context context, MapView mapView) { 
     super(context, mapView); 
     this.mapView = mapView; 
     slips = new Drawable[4]; 
     slips[0] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_1); 
     slips[1] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_2); 
     slips[2] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_3); 
     slips[3] = context.getResources().getDrawable(R.drawable.ic_maps_indicator_current_position_4); 
     overlayAnimationTask = new Runnable() { 

     @Override 
     public void run() { 
      currSlip = (currSlip + 1) % slips.length; 
      CustomMyLocationOverlay.this.mapView.invalidate(); 
      handler.removeCallbacks(overlayAnimationTask); 
      handler.postDelayed(overlayAnimationTask, 200); 

     } 

     }; 
     handler.removeCallbacks(overlayAnimationTask); 
     handler.postAtTime(overlayAnimationTask, 100); 
    } 



    protected void drawMyLocation(Canvas canvas, MapView mapView, Location lastFix, GeoPoint myLocation, long when) { 
     Log.v(TAG, "draw: " + System.currentTimeMillis());  
     mapView.getProjection().toPixels(myLocation, point); 
     rect.left = point.x - slips[currSlip].getIntrinsicWidth()/2; 
     rect.top = point.y - slips[currSlip].getIntrinsicHeight()/2; 
     rect.right = point.x + slips[currSlip].getIntrinsicWidth()/2; 
     rect.bottom = point.y + slips[currSlip].getIntrinsicHeight()/2; 
     slips[currSlip].setBounds(rect); 
     slips[currSlip].draw(canvas); 
    } 
} 

,再加上你需要創建4個圖標,並把它們在res /可繪製文件夾下的名字ic_maps_indicator_current_position_1,ic_maps_indicator_current_position_2,ic_maps_indicator_current_position_3,ic_maps_indicator_current_position_4。你需要自己繪製它們。

0
public class CustomMyLocationOverlay extends MyLocationOverlay { 
@Override 
    protected void drawMyLocation(Canvas canvas, MapView mapView, Location location, 
      GeoPoint geoPoint, long when) { 
     if (!recenter) { 
      mapView.getController().stopAnimation(false); 
     } 

     // Now draw the location overlay. 
     super.drawMyLocation(canvas, mapView, location, geoPoint, when); 
    } 
} 

時位置的變化採用了相同的邏輯圖的動畫,所以通過停止動畫,我能停止map.Hope它幫助你重新定心地圖的recenter。 它爲我工作。