9

「MapActivity」と「ItemizedOverlay」を使用して、Eclipse で Android の Google マップにオーバーレイを描画することができました。ただし、地図を拡大または縮小しても、オーバーレイのサイズは変わりません。

オーバーレイをマップ上で「固定」し、マップに合わせてズームインおよびズームアウトしたい。これはどのように行うことができますか?

境界を定義するためのチュートリアルが見つかりません (たとえば、オーバーレイ画像のコーナーとして GPS 座標を使用)。いくつか知っている場合はリンクを提供してください。

それを行う他の方法はありますか?

どうもありがとう。

4

2 に答える 2

7

はいあります。私のアプリケーションでも同じ問題がありました。これは例であり、完全に機能します。ここに描かれた円は、マップをズームインおよびズームアウトすると拡大縮小されます。

オーバーレイ クラスで:

public class ImpactOverlay extends Overlay {

private static int CIRCLERADIUS = 0;
private GeoPoint geopoint;

public ImpactOverlay(GeoPoint point, int myRadius) {
    geopoint = point;
    CIRCLERADIUS = myRadius;
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    // Transfrom geoposition to Point on canvas
    Projection projection = mapView.getProjection();
    Point point = new Point();
    projection.toPixels(geopoint, point);

    // the circle to mark the spot
    Paint circle = new Paint();
    circle.setColor(Color.BLACK);
    int myCircleRadius = metersToRadius(CIRCLERADIUS, mapView, (double)geopoint.getLatitudeE6()/1000000);
    canvas.drawCircle(point.x, point.y, myCircleRadius, circle);
}

public static int metersToRadius(float meters, MapView map, double latitude) {
    return (int) (map.getProjection().metersToEquatorPixels(meters) * (1/ Math.cos(Math.toRadians(latitude))));         
}
}

オーバーレイがズームから再描画されると、マーカーは meterToRadius スケールに基づいてサイズ変更されます。それが役に立てば幸い。

于 2011-08-22T20:37:41.653 に答える
0

少し調べた後、次の答えにたどり着きました (このブログのコードを使用してサイズ変更を行いました)。

上記と同じ方法をオーバーライドしましたが、いくつかの違いがあります。

  • drawCircle メソッドの代わりに drawBitmap メソッドを使用しました
  • Paint オブジェクトを使用しませんでした
  • オーバーレイ項目を循環してマーカーのサイズを変更しました

それは次のようになります。

 for(OverlayItem currentPoint:mOverlays){
        geopoint =currentPoint.getPoint();
        Point point = new Point();
        projection.toPixels(geopoint, point);                       
        BitmapDrawable bitDraw= ((BitmapDrawable)currentPoint.getMarker(0));
        Drawable currentMarker = currentPoint.getMarker(0);
        /*if (currentMarker!=null){

            if (currentWidthRatio<.6f) {                
                currentWidthRatio = .6f;                    
            }
            else if (currentWidthRatio>1.5f) {
                currentWidthRatio = 1.5f;
            }
        }*/

        if (bitDraw!=null){         
        Bitmap bitmap = getResizedBitmap(bitDraw.getBitmap(),(int)(currentMarker.getIntrinsicHeight() * currentWidthRatio),
                (int)(currentMarker.getIntrinsicWidth()*currentWidthRatio));

        canvas.drawBitmap(bitmap,
                point.x - bitmap.getHeight()/2,
                point.y - bitmap.getWidth()/2, null);
        }else{
            Log.println(Log.DEBUG,"non-existent point", "");
        }
  }

ただし、注意してください!currentPoint.getMarker(0) メソッドは、その名前が示すように、現在のマーカーのデータを取得します。つまり、元のサイズであり、それ以降に成長 (または縮小) した方法ではありません。次の方法が必要です。

  • マップの元のサイズを保存する
  • (比率)からどのように変化したかを検証する

コメントアウトしたコードは、許可したい最大および最小のサイズ変更を処理します (したがって、マーカーが重なり合うことなく表示され、人間の目には判読可能になります)。

これが役立つことを願っています!

于 2012-04-17T18:50:50.223 に答える