Добавить маркер местоположения в дополнение к пользовательским наложения плитки Android - PullRequest
2 голосов
/ 17 июня 2011

Я накладываю пользовательские радарные погодные плитки поверх Google Maps. Я также хотел бы добавить маркер булавки местоположения в соответствии с городом, из которого пользователь просматривает погоду. Я не могу понять, как получить плитки и маркер. Я могу сделать одно или другое, но не оба .... любая помощь?

У меня есть класс 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();
    }
...