2012-07-05 58 views
0

我有以下自定義MapView,每次地圖放大時都會記錄「縮放」。Android:將消息從子類發送到活動

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.util.Log; 
import com.google.android.maps.MapView; 

public class CustomMapView extends MapView{ 

    int oldZoomLevel=0; 

    public CustomMapView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void dispatchDraw(Canvas canvas) { 
     super.dispatchDraw(canvas); 
     if (getZoomLevel() != oldZoomLevel) { 
      Log.i("EOH", "ZOOOMED"); 

      oldZoomLevel = getZoomLevel(); 
     } 

    } 
} 

這是從我的onCreate(...)活動的一個片段:

... 
mapView = (CustomMapView) findViewById(R.id.map); 
mapView.setBuiltInZoomControls(true); 
mapOverlays = mapView.getOverlays(); 
... 

現在我該怎樣得到「放大」到我的活動消息?我想刷新地圖的圖標,一旦用戶放大的位置...

我試過看BroadcastReceivers,但我不知道這是要走的路嗎?

很多感謝,

+1

做你知道約單:HTTP:// stackoverflow.com/a/8489798/1012284 – 2012-07-05 12:36:07

回答

1

您可以在CustomMapView類寫一個簡單的監聽器:

public class CustomMapView extends MapView{ 

    public interface MapZoomListener { 

     public void onZoom(); 
    } 

    private MapZoomListener mListener; 

    public void setZoomListener(MapZoomListener listener){ 
     mListener = listener; 
    } 

    // ... 

    @Override 
    protected void dispatchDraw(Canvas canvas) { 
     super.dispatchDraw(canvas); 
     if (getZoomLevel() != oldZoomLevel) { 
      Log.i("EOH", "ZOOOMED"); 
      mListener.onZoom(); 
      oldZoomLevel = getZoomLevel(); 
     } 
    } 
} 

在你的活動

... 
mapView = (CustomMapView) findViewById(R.id.map); 
mapView.setZoomListener(new CustomMapView.MapZoomListener { 
    public void onZoom(){ 
     // Your logic here 
    } 
}); 
mapView.setBuiltInZoomControls(true); 
mapOverlays = mapView.getOverlays(); 
... 
+0

它的工作原理!非常感謝!!! – Eamorr 2012-07-05 13:17:40

+0

歡迎您! – 2012-07-05 13:18:04