谷歌地图中的地面叠加概念内存不足?

时间:2014-07-09 14:29:05

标签: android image google-maps

在我的应用程序中,我通过使用地面覆盖在谷歌地图上显示图像。并且还在此图像上显示地图标记。在我的应用程序中,我使用视图寻呼机加载图像。并且在视图寻呼机下方显示地图。在此地图中,我使用地面叠加概念显示图像,并使用纬度和经度在此图像上添加标记。现在,当我滚动图像时,使用纬度和经度清除标记和新标记。通过使用以下方法我显示地图上的图像。

         public void loadMap(){

             map.setMyLocationEnabled(true);

            //For memory issue..

              bitmap = (Bitmap)BitmapFactory.decodeResource(this.getResources(), R.drawable.categorymap);
              BitmapFactory.Options o2 = new BitmapFactory.Options();
              o2.inSampleSize=4;
              image=BitmapDescriptorFactory.fromBitmap(bitmap);

//             BitmapDescriptor image = BitmapDescriptorFactory.fromResource(R.drawable.categorymap);
               GroundOverlayOptions groundOverlay = new GroundOverlayOptions()
              .image(image)
              .positionFromBounds(bounds)
              .transparency(0.1f)
              .anchor(0.1f, 0.5f);
              map.addGroundOverlay(groundOverlay);
              bitmap.recycle();

              map.getUiSettings().setRotateGesturesEnabled(false);
              map.getUiSettings().setScrollGesturesEnabled(true);
         }

当我滚动图像时,我使用以下方法更改了标记。

 public void setData(final int pos)
 {
     if(arl_place.size()!=0)
     {
         txt_right.setText(arl_locationname.get(pos));
         txt_left.setText(arl_place.get(pos));
     }


     double f_lat=0,f_lang=0;
     try{
    JSONArray jarr=null;
    jarr=arl_mapins.get(pos);
     if(jarr.length()!=0 || !jarr.equals(null)){

     for(int i=0;i<jarr.length();i++){
         JSONObject job=jarr.getJSONObject(i);
         f_lat=Float.parseFloat(job.getString("mapLat"));
         f_lang=Float.parseFloat(job.getString("mapLang"));
         MarkerOptions marker = new MarkerOptions().position(new LatLng(f_lat, f_lang)).title(arl_place.get(pos));
         mapmarker=map.addMarker(marker);
       }

     }


     map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(f_lat, f_lang), 16)); 
     jamapins=arl_mapins.get(pos);
     strPlacename=arl_place.get(pos);
     map.setOnMarkerClickListener(new OnMarkerClickListener()
     {
          @SuppressWarnings("deprecation")
        @Override
         public boolean onMarkerClick(Marker arg0) {
            // if(arg0.getTitle().equals(arl_place.get(0)))  {  
            Intent intent=new Intent(getParent(),MapZoom_BigEatDrinkActivity.class);  
            Intent intent2=new Intent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

             intent2.putExtra("pinvalues", jamapins.toString());
             intent2.putExtra("place",strPlacename);
             intent2.putExtra("position",pos);
             View view = MapTab.group.getLocalActivityManager().startActivity("notification",intent2).getDecorView();  
             MapTab.group.replaceView(view);
            // }
             return true;
         }

     });

 }catch(Exception e){e.printStackTrace();}
 }

但我的问题是当我将图像从第一个滚动到最后一个并且最后一个在视图寻呼机中返回到前一个屏幕并再次转到查看寻呼机屏幕并再次滚动图像我得到内存异常。我试过很多这个例外,但我没有解决这个例外。这个例外也没有进入所有设备,如 galaxy nexus samsung s4 。但我在某些设备中得到这个喜欢三星galaxy r 。并将apk上传到Playstore。在这个应用程序中我集成了bugsense。所以我得到了大量的崩溃报告。所以请建议我支持所有设备,不要出现内存问题。谢谢所有人..

1 个答案:

答案 0 :(得分:0)

您不应该使用太大的图像。

如果您想要在大区域(TileOverlay)上显示图片而不是在缩放时将其设置为像素化,请使用GroundOverlay代替city, country

来自out-of-memory-exception-google-map-groundoverlayandroid-google-maps-groundoverlay-from-bitmap-appears-white