如何从drawable文件夹添加图像,而不是从url添加图像



我使用的源代码位于:URLhttps://github.com/jgilfelt/android-mapviewballoons,在我的申请中。它使用url显示图像。但是我如何让它从我的应用程序的可绘制文件夹中加载图像呢?

我找到了这个MapViewurl,它显示气球中的图像。但它显示的是来自url的图像,因为我想在那里显示我自己的文件夹中的图像。我该如何做到这一点?

代码:

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;
}
}

你不能。因为这个R.drawable.*值是由android sdk在您将新图像添加到文件夹时创建的。这意味着,它们不是在你的应用运行时创建的,你不能添加新的。

相反,您可以将图像保存到文件夹中,并将它们的方式和名称保存到数据库中。

这就是添加图像作为地图叠加的方法

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;
}
}

在拥有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

看看这个教程。。

最新更新