2012-10-04 36 views
0

我正在使用自定義的Overlay類在MapView小部件上顯示標記。我使用了我發現的另一個示例中的相同圖像,但我的覆蓋圖缺少陰影。無法顯示帶有陰影的地圖標記

下面是原文:

Here's the original

..和這裏的地雷:

..and here's mine:

這怎麼陰影產生的?這是Overlay類的draw方法中的另一個drawable資源或一些技巧。謝謝。

-

這裏是我的Overlay類:

public class Mappin extends com.google.android.maps.Overlay { 

    private final GeoPoint geoPoint; 
    private final Context ctxContext; 

    public Mappin(Context ctxContext, GeoPoint geoPoint) { 
     super(); 

     this.geoPoint = geoPoint; 
     this.ctxContext = ctxContext; 
    } 

    public boolean draw(Canvas canCanvas, MapView mvwMap, boolean booShadow, long lngWhen) { 
     super.draw(canCanvas, mvwMap, booShadow); 

     Point screenPts = new Point(); 
     mvwMap.getProjection().toPixels(this.geoPoint, screenPts); 

     Bitmap bmp = BitmapFactory.decodeResource(this.ctxContext.getResources(), R.drawable.ic_location_marker); 
     canCanvas.drawBitmap(bmp, screenPts.x - bmp.getWidth()/2, screenPts.y - bmp.getHeight(), null); 

     return true; 
    } 

} 
+0

我認爲,它的默認屬性。你可以檢查這個:http://stackoverflow.com/questions/3515638/mapview-marker-shadow – 2012-10-04 07:20:55

+0

它不是一些神奇的伎倆。這取決於你創造和放置陰影。 – njzk2

+0

@Lokesh,我看了一下你提到的鏈接,但我無法理解我做錯了什麼。我已經發布了我的Overlay類的代碼。你可以看一看,看看你有沒有看錯。謝謝。 –

回答

0

我發現一些代碼,一個顯示的標記陰影。我需要調整歪斜因素才能使其發揮作用,但它現在已經成功了。這裏是我的自定義Overlay的整個代碼:

public class Mappin extends Overlay { 

    protected Drawable drwMarker; 
    protected GeoPoint gptCoordinates; 

    public Mappin(Drawable drwMarker, GeoPoint gptCoordinates) { 

     this.drwMarker = drwMarker; 
     this.gptCoordinates = gptCoordinates; 

    } 

    @Override 
    public void draw(Canvas canCanvas, MapView mapView, boolean booShadow) { 

     super.draw(canCanvas, mapView, booShadow); 

     Projection prjProjection = mapView.getProjection(); 

     Integer x; 
     Integer y; 

     if (!booShadow) { 

      x = prjProjection.toPixels(gptCoordinates, null).x - (drwMarker.getIntrinsicWidth()/2); 
      y = prjProjection.toPixels(gptCoordinates, null).y - (drwMarker.getIntrinsicHeight()); 

     } else { 

      Integer intSign = (SHADOW_X_SKEW > 0 ? 1 : -1); 
      Float fltScaler = 1.1F - Math.abs(SHADOW_X_SKEW); 
      x = (int) (prjProjection.toPixels(gptCoordinates, null).x - (intSign * (drwMarker.getIntrinsicWidth() * fltScaler))); 
      y = (int) (prjProjection.toPixels(gptCoordinates, null).y - (drwMarker.getIntrinsicHeight() * SHADOW_Y_SCALE)); 

     } 

     drawAt(canCanvas, drwMarker, x, y, booShadow); 

    } 

}