问题
I am trying to display a ground overlay downloaded from url.
the problem is that the image is not shown and the overlay appears as white square.
thinking the Bitmap Object is faulty i tested:
addding the same bitmap Object to a marker - the marker shows o.k
get an image with
.fromResource(R.id.myimage)- the overlay shows o.k
but my image is from downloaded Bitmap Object.
This is my code:
private void addOverlayFromBitmap(Bitmap bmImage){
BitmapDescriptor image = BitmapDescriptorFactory.fromBitmap(bmImage);
//image = BitmapDescriptorFactory.fromResource(R.drawable.radaraimage9);
//Set Anchors
LatLng NE_ANCHOR = new LatLng(34.516481,37.679488);
LatLng SW_ANCHOR = new LatLng(29.474814,31.876530);
//Set Bounds
LatLngBounds bounds = new LatLngBounds(SW_ANCHOR,NE_ANCHOR);
// Append Overlay to map - image appears as white square
map.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.positionFromBounds(bounds)
.transparency((float) 0.5));
//add marker for debugging - image appears fine
map.addMarker(new MarkerOptions()
.position(NORTH_EAST_ANCHOR)
.icon(image)
);
}
The AsyncTask:
private class LoadRadarImageryTask extends AsyncTask<String, Void, Bitmap> {
Bitmap bmImage;
public LoadRadarImageryTask() {
super();
}
protected Bitmap doInBackground(String... urls) {
String url = urls[0];
Bitmap image = null;
try {
InputStream in = new java.net.URL(url).openStream();
image = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return image;
}
protected void onPostExecute(Bitmap image) {
addOverlayFromBitmap(image);
}
}
回答1:
It may be a problem of using large images means higher resolution. It could be suggested by your log cat so can you paste your log cat here.
OR
Try using Tile Overlay instead of ground overlay.
OR
use this code which worked for me in same problem..
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
public class MapDisplayActivity extends FragmentActivity implements OnMapClickListener, OnMapLongClickListener {
private GoogleMap myMap;
private static LatLng SearchPlace;
double Latitude;
double Longitiude;
List<Address> addresses;
//Address location;
BitmapDescriptor image;
/// private static final LatLng NEWARK = new LatLng(18.5236, 73.8478);
private GroundOverlay mGroundOverlay;
//this is for omnistarg dont touch this
LatLng southwest= new LatLng(-85.513398,-178.242187);
LatLng northeast= new LatLng(85.513398,178.242187);
float zoomValue = 7.0f;
private String SpinerValue;
private Bitmap bitmap;
@Override
`enter code here`protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapactivity);
//VMRuntime.getRuntime().setMinimumHeapSize(4 * 1024 * 1024);
Log.v("Utils", "Max mem in MB : " + (Runtime.getRuntime().maxMemory()/(1024*1024)));
Runtime.getRuntime().maxMemory();
Debug.getNativeHeapSize();
initActionBar();
//textInfo=(TextView)findViewById(R.id.locinfo);
FragmentManager myFragmentManager = getSupportFragmentManager();
SupportMapFragment mySupportMapFragment
= (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);
myMap = mySupportMapFragment.getMap();
// myMap.setMyLocationEnabled(true);
// myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
//myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
myMap.setOnMapClickListener(this);
myMap.setOnMapLongClickListener(this);
myMap.getUiSettings().setZoomControlsEnabled(true);
myMap.getUiSettings().setMyLocationButtonEnabled(true);
Intent intent=getIntent();
Latitude=intent.getDoubleExtra("Latitude", 0.000);
Longitiude=intent.getDoubleExtra("Longititude", 0.000);
SpinerValue=(String)intent.getStringExtra("SPINNERVALUE");
SearchPlace = new LatLng(Latitude, Longitiude);
myMap.moveCamera(CameraUpdateFactory.newLatLng(SearchPlace));
myMap.addMarker(new MarkerOptions().position(SearchPlace));//.title(PlaceName));
drawImageOverMap();
}
public void drawImageOverMap(){
myMap.animateCamera(CameraUpdateFactory.zoomTo(zoomValue));
//image =BitmapDescriptorFactory.fromResource(R.drawable.omnistar_g);
if(SpinerValue.equalsIgnoreCase("TEC")){
//centerpoint_vrs
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
//.transparency(0.4f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
else if(SpinerValue.equalsIgnoreCase("OmniSTARG2")){
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_g_img);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.4f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
else if(SpinerValue.equalsIgnoreCase("OmniStarHP")){
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_hp_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.4f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
/////////////////////////////////////////////
else if(SpinerValue.equalsIgnoreCase("OmniStarVBS")){
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_vbs_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.4f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
else if(SpinerValue.equalsIgnoreCase("OmniSTARXP")){
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.omnistar_xp_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.4f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
else if(SpinerValue.equalsIgnoreCase("RTXStandardviaCellular")){
//rtxcell
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.rtx_cell_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.3f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
else if(SpinerValue.equalsIgnoreCase("RTXFastviaSatellite")){
//rtxfast.png
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.rtx_fast_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.3f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
else if(SpinerValue.equalsIgnoreCase("RTXStandardviaSatellite")){
//rtxsat.png
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.rtx_sat_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.3f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
else if(SpinerValue.equalsIgnoreCase("VRSNow")){
//vrsnowtec.png
bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.vrsnow_tec_two);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=4;
image=BitmapDescriptorFactory.fromBitmap(bitmap);
LatLngBounds bounds =new LatLngBounds( southwest, northeast);
mGroundOverlay = myMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.transparency(0.3f)
//.anchor(0, 1)
.positionFromBounds(bounds));
}
// InputStream is =getClass().getResourceAsStream(omnistar_g);
//bitmap = readAssetsBitmap("omnistar_g.png");
//bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.trimble_screen_logo);
//bitmap=bitmap(is);
//image =BitmapDescriptorFactory.fromResource(R.drawable.omnistar_g);
bitmap.recycle();
bitmap = null;
System.gc();
Runtime.getRuntime().gc();
}
来源:https://stackoverflow.com/questions/20373728/android-google-maps-groundoverlay-from-bitmap-appears-white