2014-11-06 3 views
0

내 안드로이드 앱에서 동적 인지도 아이콘을 만들고 있는데, 가끔 및 IllegalArgumentException에 동일한 logcat 오류가 있습니다. 여기 내 코드는 여러 개의 마커를nutiteq의 마커를 그리는 동안 비트 맵 크기가 32 비트를 초과합니다.

for (int i = 0; i < lats.size(); i++) { 
     // draw marker 
     Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.drawable.ic_place); 
     MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(markerBitmap).setSize(0.5f).setColor(Color.RED).build(); 

     // define custom label 
     try { 
      Label markerLabel = new DefaultLabel("", data.get(i)); 
      // define map location marker, convert to base map coordinate 
      MapPos position = maplayer.getProjection().fromWgs84(Double.parseDouble(lngs.get(i)), Double.parseDouble(lats.get(i))); 

      // add marker to the current map layer 
      markerLayer = new MarkerLayer(maplayer.getProjection()); 
      marker = new Marker(position, markerLabel, markerStyle, markerLayer); 
      markerLayer.add(marker); 
      mapView.getLayers().addLayer(markerLayer); 
     } catch (Exception e) { 
      Log.d("Error Marker", e.getMessage() + " " + e.getCause()); 
     } catch (OutOfMemoryError e){ 
      Toast.makeText(getApplicationContext(), "OutOfMemory " + e.getMessage() + " " + e.getCause(), Toast.LENGTH_LONG).show(); 
      Log.d("OutOfMemory", e.getMessage() + " " + e.getCause()); 
     } 
    } 

을 그릴 수 있으며이

11-05 18:16:18.340 28622-28694/kolek.com.kolekin E/AndroidRuntime? FATAL EXCEPTION: GLThread 657 
java.lang.IllegalArgumentException: bitmap size exceeds 32bits 
     at android.graphics.Bitmap.nativeCreate(Native Method) 
     at android.graphics.Bitmap.createBitmap(Bitmap.java:669) 
     at android.graphics.Bitmap.createBitmap(Bitmap.java:649) 
     at com.nutiteq.ui.Label.getTextureInfo(Label.java:77) 
     at com.nutiteq.ui.DefaultLabel.drawMarkerLabel(DefaultLabel.java:153) 
     at com.nutiteq.renderers.MapRenderer3D.updateLabel(MapRenderer3D.java:484) 
     at com.nutiteq.renderers.MapRenderer3D.onDrawFrame(MapRenderer3D.java:358) 
     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516) 
     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

11-05 18:29:03.630 32187-32423/kolek.com.kolekin E/AndroidRuntime? FATAL EXCEPTION: GLThread 559 
java.lang.OutOfMemoryError 
     at android.graphics.Bitmap.nativeCreate(Native Method) 
     at android.graphics.Bitmap.createBitmap(Bitmap.java:669) 
     at android.graphics.Bitmap.createBitmap(Bitmap.java:649) 
     at com.nutiteq.ui.Label.getTextureInfo(Label.java:77) 
     at com.nutiteq.ui.DefaultLabel.drawMarkerLabel(DefaultLabel.java:153) 
     at com.nutiteq.renderers.MapRenderer3D.updateLabel(MapRenderer3D.java:484) 
     at com.nutiteq.renderers.MapRenderer3D.onDrawFrame(MapRenderer3D.java:358) 
     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516) 
     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

는 사람이 발생하는 로그 캣 오류입니다? 나는 어떤 도움을 주셔서 감사합니다. 고맙습니다.

답변

0

모든 마커에 대해 많은 비트 맵 복사본을 만듭니다. 왜이 행을 for() 전에 넣지 않고 마커에 대해 동일한 비트 맵 및 스타일을 사용합니까?

 Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.drawable.ic_place); 
     MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(markerBitmap).setSize(0.5f).setColor(Color.RED).build(); 

그리고 당신도 정도 전에 이러한 라인을 넣어주세요, 각 마커에 대한 새로운 레이어를 생성() :

 markerLayer = new MarkerLayer(maplayer.getProjection()); 
    mapView.getLayers().addLayer(markerLayer); 

그래서 코드가 될 것이다 :

Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.drawable.ic_place); 
    MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(markerBitmap).setSize(0.5f).setColor(Color.RED).build(); 

    markerLayer = new MarkerLayer(maplayer.getProjection()); 
    mapView.getLayers().addLayer(markerLayer); 

    for (int i = 0; i < lats.size(); i++) { 
     // draw marker 
     // define custom label 
     try { 
      Label markerLabel = new DefaultLabel("", data.get(i)); 
      // define map location marker, convert to base map coordinate 
      MapPos position = maplayer.getProjection().fromWgs84(Double.parseDouble(lngs.get(i)), Double.parseDouble(lats.get(i))); 

      // add marker to the current map layer 
      marker = new Marker(position, markerLabel, markerStyle, markerLayer); 
      markerLayer.add(marker); 
     } catch (Exception e) { 
      Log.d("Error Marker", e.getMessage() + " " + e.getCause()); 
     } catch (OutOfMemoryError e){ 
      Toast.makeText(getApplicationContext(), "OutOfMemory " + e.getMessage() + " " + e.getCause(), Toast.LENGTH_LONG).show(); 
      Log.d("OutOfMemory", e.getMessage() + " " + e.getCause()); 
     } 
    }