0

カスタム クラスを使用して、ウィジェットOverlayにマーカーを表示しています。MapView見つけた別の例と同じ画像を使用していますが、オーバーレイに影がありません。

ここにオリジナルがあります:

オリジナルはこちら

..そしてここに私のものがあります:

..そしてここに私のものがあります:

その影はどのように作られるのですか?それは別の描画可能なリソースですか、それともクラスのdrawメソッドのいくつかのトリックですか。Overlayありがとう。

--

これが私の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;
    }

}
4

1 に答える 1

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);

    }

}
于 2012-10-04T10:37:28.710 に答える