I'm using the source code provided at : URL https://github.com/jgilfelt/android-mapviewballoons , in my application. It shows an image by using a url. But how do I make it load images form my app's drawable folder ?
I have found this MapView
url, which show images in a balloon. But it is showing images from the url, where as I want to show my own images from a folder. How do I achieve that?
Code:
public class CustomMap extends MapActivity {
MapView mapView;
List<Overlay> mapOverlays;
Drawable drawable;
Drawable drawable2;
CustomItemizedOverlay<CustomOverlayItem> itemizedOverlay;
CustomItemizedOverlay<CustomOverlayItem> itemizedOverlay2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
// first overlay
drawable = getResources().getDrawable(R.drawable.marker);
itemizedOverlay = new CustomItemizedOverlay<CustomOverlayItem>(drawable,
mapView);
GeoPoint point = new GeoPoint((int)(51.5174723*1E6),(int)(-0.0899537*1E6));
CustomOverlayItem overlayItem = new CustomOverlayItem(point,
"Tomorrow Never Dies (1997)",
"(M gives Bond his mission in Daimler car)",
"http://ia.media-imdb.com/images
/M/MV5BMTM1MTk2ODQxNV5BMl5BanBnXkFtZTcwOTY5MDg0NA@@._V1._SX40_CR0,0,40,54_.jpg");
itemizedOverlay.addOverlay(overlayItem);
GeoPoint point2 = new GeoPoint((int)(51.515259*1E6),(int)(-0.086623*1E6));
CustomOverlayItem overlayItem2 = new CustomOverlayItem(point2,
"GoldenEye (1995)",
"(Interiors Russian defence ministry council chambers in
St Petersburg)",
"http://ia.media-imdb.com/images
M/MV5BMzk2OTg
4MTk1NF5BMl5BanBnXkFtZTcwNjExNTgzNA@@._V1._SX40_CR0,0,40,54_.jpg");
itemizedOverlay.addOverlay(overlayItem2);
mapOverlays.add(itemizedOverlay);
// second overlay
drawable2 = getResources().getDrawable(R.drawable.marker2);
itemizedOverlay2 = new CustomItemizedOverlay<CustomOverlayItem>
(drawable2, mapView);
GeoPoint point3 = new GeoPoint((int)(51.513329*1E6),(int)(-0.08896*1E6));
CustomOverlayItem overlayItem3 = new CustomOverlayItem(point3, "Sliding
Doors (1998)",
"(interiors)", null);
itemizedOverlay2.addOverlay(overlayItem3);
GeoPoint point4 = new GeoPoint((int)(51.51738*1E6),(int)(-0.08186*1E6));
CustomOverlayItem overlayItem4 = new CustomOverlayItem(point4, "Mission:
Impossible (1996)",
"(Ethan & Jim cafe meeting)",
"http://ia.media-imdb.com/images
/M/MV5BMjAyNjk5Njk0MV
5BMl5BanBnXkFtZTcwOTA4MjIyMQ@@._V1._SX40_CR0,0,40,54_.jpg");
itemizedOverlay2.addOverlay(overlayItem4);
mapOverlays.add(itemizedOverlay2);
final MapController mc = mapView.getController();
mc.animateTo(point2);
mc.setZoom(16);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
this is how you add an Image as a Map Overlay
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
public class DrawableMapOverlay extends Overlay {
private static final double MAX_TAP_DISTANCE_KM = 3;
// Rough approximation - one degree = 50 nautical miles
private static final double MAX_TAP_DISTANCE_DEGREES = MAX_TAP_DISTANCE_KM * 0.5399568 * 50;
private final GeoPoint geoPoint;
private final Context context;
private final int drawable;
/**
* @param context the context in which to display the overlay
* @param geoPoint the geographical point where the overlay is located
* @param drawable the ID of the desired drawable
*/
public CamerasMapOverlay(Context context, GeoPoint geoPoint, int drawable) {
this.context = context;
this.geoPoint = geoPoint;
this.drawable = drawable;
}
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
// Convert geo coordinates to screen pixels
Point screenPoint = new Point();
mapView.getProjection().toPixels(geoPoint, screenPoint);
// Read the image
Bitmap markerImage = BitmapFactory.decodeResource(context.getResources(), drawable);
// Draw it, centered around the given coordinates
canvas.drawBitmap(markerImage,
screenPoint.x - markerImage.getWidth() / 2,
screenPoint.y - markerImage.getHeight() / 2, null);
return true;
}
@Override
public boolean onTap(GeoPoint p, MapView mapView) {
// Handle tapping on the overlay here
return true;
}
}
In the activity which has your MapView:
MapView map = (MapView) findViewById(R.id.mapview);
MapController mapController = map.getController();
List<Overlay> overlays = map.getOverlays();
overlays.add(new DrawableMapOverlay(this, point, R.drawable.my_drawable);
map.invalidate();
Editors
have a look at this tutorial..
You cant. Because this R.drawable. * values are created by android sdk while you add new images to folder. this means, they arent created while your app run and you cant add new ones.
Instead of this, you can save your images to a forlder and save their ways and names to your db.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.