添加位置标记以及自定义图块叠加android

时间:2011-06-17 17:08:20

标签: android google-maps itemizedoverlay

我在Google地图上覆盖了自定义雷达天气图块。我还想根据用户正在查看天气的城市添加位置标记标记。我无法弄清楚如何使用瓷砖和标记。我可以做一个或另一个,但不是两个....任何帮助?

我有一个MapsItemizedOverlay类:

<pre><code>public class MapsItemizedOverlay extends ItemizedOverlay<OverlayItem> {

private static final String DEBUG_TAG = "TurboWeather/MapsItemizedOverlay";

private ArrayList<OverlayItem> myOverlays = new ArrayList<OverlayItem>();
//private ArrayList<Drawable> mDrawables = new ArrayList<Drawable>();
//private ArrayList<GeoPoints> mGeoPoints = new ArrayList<GeoPoints>();

public MapsItemizedOverlay(Drawable defaultMarkers, Context context) {
    super(boundCenterBottom(defaultMarkers));
    //Log.i(DEBUG_TAG, "MapsItemizedOverlay constructor");
    populate();
}

public void addOverlay(OverlayItem overlay){
    //Log.i(DEBUG_TAG, "addOverlay");
    myOverlays.add(overlay);
    populate();
}

@Override
protected OverlayItem createItem(int i) {
    //Log.i(DEBUG_TAG, "createItem");
    return myOverlays.get(i);
}

// Returns present number of items in list
@Override
public int size() {
    return myOverlays.size();
}

@Override
public void draw(Canvas canvas, MapView mapview, boolean shadow) {
    super.draw(canvas, mapview, false);
}

}

这里是我使用MapsItemizedOverlay类的地方,我可以将自定义雷达图像图块绘制到Google地图:


private void addOverlay(Drawable drawable, int xTile, int yTile) {
        OverlayItem overlayitem, locationOverlayitem;
        GeoPoint geopoint, locGeopoint;

        int x1 = 0, y1 = 0;
        double lat[] = {0.0};
        double lon[] = {0.0};
        int x[] = {0};
        int y[] = {0};
        mCurrentProjection.fromPixels(x1, y1);
        mMapOverlays = mMapView.getOverlays();
        x = new int[] {xTile};
        y = new int[] {yTile};
        TileSystem.TileXYToPixelXY(xTile, yTile, x, y);
        TileSystem.PixelXYToLatLong(x, y, mZoomLevel, lat, lon);
        Log.i(DEBUG_TAG, "X: " + x[0] + " Y: " + y[0]);
        //Log.i(DEBUG_TAG, "GeoPointX is " + lat[0] + ", GeoPointY is " + lon[0]);
        geopoint = new GeoPoint((int)(lat[0] * 1E6), (int)(lon[0] * 1E6));
        if (mMapOverlays.size() == 0) {
            mItemizedOverlay = new MapsItemizedOverlay(drawable, mContext) {
                public boolean onTouchEvent(MotionEvent event, com.google.android.maps.MapView mv) {
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_UP:
                        post(new Runnable() {
                            @Override
                            public void run() {
                                mMapView.getOverlays().clear();
                                getAccuWxTiles(mMapVars);
                            }
                        });
                        break;
                    }
                    return false;
                }
            };
        } else {
            mItemizedOverlay = new MapsItemizedOverlay(drawable, mContext);
        }
        overlayitem  = new OverlayItem(geopoint, "", "");

        mItemizedOverlay.addOverlay(overlayitem);
        mMapOverlays.add(mItemizedOverlay); 
        mMapView.invalidate();
    }

0 个答案:

没有答案