问题
I'm trying to draw a picture on the google map. I'm using the latest version of google play services and checked a lot for this issue and couldn't find an answer.
Here's some code:
BitmapDescriptor image = BitmapDescriptorFactory.fromResource(R.drawable.drawing_bg);
LatLngBounds drawingBounds = new LatLngBounds(
new LatLng(29.93530, 30.88324),
new LatLng(29.93609, 30.88329))
.including(new LatLng(29.93580, 30.88286))
.including(new LatLng(29.93563, 30.88374))
.including( new LatLng(29.93593, 30.88347))
.including(new LatLng(29.93561, 30.88298))
.including(new LatLng(29.93591, 30.88344))
.including(new LatLng(29.93563, 30.88301));
GroundOverlay groundOverlay = mMap.addGroundOverlay(new GroundOverlayOptions()
.image(image)
.zIndex(2)
.positionFromBounds(drawingBounds)
.transparency((float) 0.0));
final Marker currentLocationMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(29.93530, 30.88324)).draggable(true));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(29.935431502437588,30.88327579200268), 20));
From LogCat:
05-03 11:45:17.860: E/dalvikvm-heap(1115): Out of memory on a 67108880-byte allocation.
05-03 11:45:17.860: I/dalvikvm(1115): "GLThread 8598" prio=5 tid=21 RUNNABLE
05-03 11:45:17.860: I/dalvikvm(1115): | group="main" sCount=0 dsCount=0 obj=0x4284d580 self=0x5a559790
05-03 11:45:17.860: I/dalvikvm(1115): | sysTid=1502 nice=1 sched=0/0 cgrp=apps handle=1596223616
05-03 11:45:17.860: I/dalvikvm(1115): | schedstat=( 216011094 92043700 221 ) utm=19 stm=2 core=3
05-03 11:45:17.860: I/dalvikvm(1115): at android.graphics.Bitmap.nativeCreate(Native Method)
05-03 11:45:17.860: I/dalvikvm(1115): at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
05-03 11:45:17.860: I/dalvikvm(1115): at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.s.h.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.cr.a.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.cr.a.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.z.aa.b((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.z.aa.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.z.bi.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.af.v.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.af.v.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.af.v.a((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.p.q.m((null):-1)
05-03 11:45:17.860: I/dalvikvm(1115): at maps.p.q.run((null):-1)
05-03 11:45:17.875: W/dalvikvm(1115): threadid=21: thread exiting with uncaught exception (group=0x412cc2a0)
05-03 11:45:17.880: E/AndroidRuntime(1115): FATAL EXCEPTION: GLThread 8598
05-03 11:45:17.880: E/AndroidRuntime(1115): java.lang.OutOfMemoryError
05-03 11:45:17.880: E/AndroidRuntime(1115): at android.graphics.Bitmap.nativeCreate(Native Method)
05-03 11:45:17.880: E/AndroidRuntime(1115): at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
05-03 11:45:17.880: E/AndroidRuntime(1115): at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.s.h.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.cr.a.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.cr.a.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.z.aa.b(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.z.aa.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.z.bi.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.af.v.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.af.v.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.af.v.a(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.p.q.m(Unknown Source)
05-03 11:45:17.880: E/AndroidRuntime(1115): at maps.p.q.run(Unknown Source)
05-03 11:45:29.395: W/SurfaceView(1115): CHECK surface infomation creating=false formatChanged=false sizeChanged=false visible=false visibleChanged=true surfaceChanged=true realSizeChanged=false redrawNeeded=false left=false top=false
I would really appreciate any help
回答1:
You should not be using images that are too large. You logcat suggests you try to allocate 67 MB, which is way too much for most of the devices.
Edit:
Maybe try using TileOverlay
instead of GroundOverlay
if you want to show images on a large area (city, country) and not have it pixelated when zoomed.
回答2:
These 67Mb you are seeing seem to be from a confirmed bug in google maps, see here for more info: https://code.google.com/p/gmaps-api-issues/issues/detail?id=7325
It was fixed back in February (2015 for the record). It should be solved if you use the latest version of google maps.
来源:https://stackoverflow.com/questions/16356296/out-of-memory-exception-google-map-groundoverlay