android - custom marker icons only show after refreshing markers -


i working on clustering of custom markers contain icons loaded picasso. when map activity starts cluster marker icons not show, after refreshing markers or zooming map. following google's api utility library , tried implement this proposal preventing garbage collector clearing picasso targets.

when run without clustering algorithm marker icons show right away after starting activity.

any ideas why cluster marker icons not show when map activity starts?

thanks in advance.

here of code:

renderer class:

    /* * draws report photos inside markers (using icongenerator). * when there multiple reports in cluster, draw multiple photos (using multidrawable). */ public class reportrenderer extends defaultclusterrenderer<reportitem> {      private final icongenerator micongenerator;     private final icongenerator mclustericongenerator;     private drawable mdrawable;     private bitmap icon_clusteritem;     private bitmap icon_cluster;      private imageview mimageview;     private final imageview mclusterimageview;     private final imageview mclusterimageview_temp;      private final int mdimension;     private layoutinflater inflater = layoutinflater.from(myapplication.getcontext());      public reportrenderer(clustermanager<reportitem> mclustermanager, googlemap map) {          super(myapplication.getcontext(), map, mclustermanager);          // initialize cluster icon generator (if multiple items in cluster)         mclustericongenerator = new icongenerator(myapplication.getcontext());         view multireport = inflater.inflate(r.layout.multi_report, null);         mclustericongenerator.setcontentview(multireport);         mclusterimageview = (imageview) multireport.findviewbyid(r.id.image_report);         mclusterimageview_temp = mclusterimageview;           // initialize cluster item icon generator (if 1 single item left in cluster)         micongenerator = new icongenerator(myapplication.getcontext());         mimageview = new imageview(myapplication.getcontext());         mdimension  = (int) myapplication.getcontext().getresources().getdimension(r.dimen.custom_report_image);         mimageview.setlayoutparams(new viewgroup.layoutparams(mdimension, mdimension));         int padding = (int) myapplication.getcontext().getresources().getdimension(r.dimen.custom_report_padding);         mimageview.setpadding(padding, padding, padding, padding);         micongenerator.setcontentview(mimageview);          mdrawable = myapplication.getcontext().getresources().getdrawable(r.drawable.drawable_template);     }      @override     protected void onclusteritemrendered(reportitem clusteritem, marker marker) {         // draw single report.         // set info window show name.         markertarget pm = new markertarget(marker);          mymarkertargets.add(pm);         picasso.with(myapplication.getcontext()).load("file://" + clusteritem.picpath).resize(150,150).into(pm);     }      @override     protected void onclusterrendered(cluster<reportitem> cluster, marker marker) {         // draw multiple report.         // note: method runs on ui thread. don't spend time in here (like in example).         list<drawable> reportphotos = new arraylist<drawable>(math.min(4, cluster.getsize()));         int width = mdimension;         int height = mdimension;         int = 0;          clustermarkertarget pm = new clustermarkertarget(marker);         myclustermarkertargets.add(pm);          (reportitem r : cluster.getitems()) {             // draw 4 @ most.             if (reportphotos.size() == 4) {                 //don't continue --> break                 break;             }             picasso.with(myapplication.getcontext()).load("file://" + r.picpath).resize(150,150).into(pm);             reportphotos.add(mdrawable);         }          multidrawable multidrawable = new multidrawable(reportphotos);         multidrawable.setbounds(0, 0, width, height);         mclusterimageview.setimagedrawable(multidrawable);          try {             icon_cluster = mclustericongenerator.makeicon(string.valueof(cluster.getsize()));             marker.seticon(bitmapdescriptorfactory.frombitmap(icon_cluster));             reportphotos.clear();             myclustermarkertargets.remove(pm);          } catch (exception e) {             reportphotos.clear();             myclustermarkertargets.remove(pm);             log.i(tag, ""+ e);         }     }      @override     protected boolean shouldrenderascluster(cluster cluster) {         // render clusters if >1.         return cluster.getsize() > 1;     } } 

inner class targets of cluster markers :

//target cluster marker (multiple items in cluster)     class clustermarkertarget implements target {          marker mmarker;          public clustermarkertarget(marker marker) {             mmarker = marker;         }          @override         public boolean equals(object o) {             if(o instanceof clustermarkertarget) {                 marker marker = ((clustermarkertarget) o).mmarker;                 return mmarker.equals(marker);             } else {                 return false;             }         }          @override         public void onbitmaploaded(bitmap bitmap, picasso.loadedfrom from) {             try {                 mclusterimageview_temp.setimagebitmap(bitmap);                 mdrawable = mclusterimageview_temp.getdrawable();             } catch (exception e) {                 log.e(tag, "" +e,e);             }         }          @override         public void onbitmapfailed(drawable errordrawable) {             mdrawable = myapplication.getcontext().getresources().getdrawable(r.drawable.fail);         }          @override         public void onprepareload(drawable placeholderdrawable) {             // no idea here         }     } 

inner class targets of cluster item markers:

//target cluster item marker (multiple items in cluster)     class markertarget implements target {          marker mmarker;          public markertarget(marker marker) {             mmarker = marker;         }          @override         public boolean equals(object o) {             if(o instanceof markertarget) {                 marker marker = ((markertarget) o).mmarker;                 return mmarker.equals(marker);             } else {                 return false;             }         }          @override         public void onbitmaploaded(bitmap bitmap, picasso.loadedfrom from) {             try {                 mimageview.setimagebitmap(bitmap);                 icon_clusteritem = micongenerator.makeicon();                 mmarker.seticon(bitmapdescriptorfactory.frombitmap(icon_clusteritem));             } catch (exception e) {                 log.i(tag, "" +e);             }             mymarkertargets.remove(this);         }          @override         public void onbitmapfailed(drawable errordrawable) {             mmarker.seticon(bitmapdescriptorfactory.fromresource(r.drawable.fail));             mymarkertargets.remove(this);         }          @override         public void onprepareload(drawable placeholderdrawable) {             // no idea here         }     }      @override     protected boolean shouldrenderascluster(cluster cluster) {         // render clusters if >1.         return cluster.getsize() > 1;     } } 


Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -