Я накладываю пользовательские радарные погодные плитки поверх 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();
}