Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Utilidad de mapas de Android: imágenes de la URL

Estoy utilizando la excelente biblioteca de utilidades de Google Maps Maps para mostrar en el mapa los marcadores personalizados con clústeres. Funciona muy bien y es muy fácil de personalizar.

Mi problema es cómo cambiar los recursos locales de la demostración (R.drawable.image_demo) a las imágenes de una URL. Estoy utilizando Universal Image Loader para cargar estas imágenes en el imageView async, pero los problemas es que las imágenes no se cargan en el marcador que corresponde.

Alguien sabe sobre cualquier ejemplo?

Este es el código en el que se descarga y carga la imagen dentro de la clase DefaultClusterRender. Gracias por adelantado.

@Override protected void onBeforeClusterItemRendered(MapFoto mapFoto, MarkerOptions markerOptions) { // Draw a single person. // Set the info window to show their name. // mImageView.setImageResource(R.drawable.barcelona); // mImageView.setScaleType(ScaleType.CENTER_CROP); Log.d("", "--- url: " + mapFoto.getPictureUrl()); ImageLoader.getInstance().displayImage(mapFoto.getPictureUrl(), mImageView, BlipointApp.optionsAvatarImage, new ImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { mImageView.setImageBitmap(loadedImage); mImageView.setScaleType(ScaleType.CENTER_CROP); } @Override public void onLoadingCancelled(String imageUri, View view) { } }); Bitmap icon = mIconGenerator.makeIcon(); markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(mapFoto.getName()); } 

  • ¿Cómo puedo mostrar la ubicación actual en un Google Map en Android Marshmallow?
  • Google maps api - Firma no válida
  • ¿Todavía es necesario el permiso READ_GSERVICES para Google Maps?
  • Error al inflar fragmento de clase para SupportMapFragment
  • Android google maps v2 problemas de rendimiento
  • Posicionamiento de Google Maps v2 zoom en controles en Android
  • Google Map en Android no se carga
  • ¿Es el Map Api Key y Google Places Api iguales?
  • One Solution collect form web for “Utilidad de mapas de Android: imágenes de la URL”

    Tuve un problema similar al usar el UIL, no todas las imágenes fueron cargadas. Cada vez que corría la actividad del mapa y ampliado en los grupos había diferentes marcadores / clusters que no tenía ninguna imagen. Sólo se mostraron los iconos de marcador / clúster estándar.

    Finalmente, después de dos días de probar y probar, funciona bien. Temporalmente había cambiado a la biblioteca de Picasso para ver si podría funcionar pero experimenté problemas similares allí y no podía hacerlo. Además con Picasso todas las imágenes cargadas desde la web (URL) fueron giradas en 90 grados. No pude entender por qué. De acuerdo con algunos mensajes que encontré en la web que podría tener que hacer algo con el dispositivo, estoy usando el dispositivo Samsung Galaxy S5 para la prueba. Pero no estoy seguro….

    Aquí algunas notas de cómo lo hice: He creado un HardRefSimpleImageLoadingListener con un ImageView que existirá hasta que el proceso de carga UIL ha terminado. Sin su referencia dura ImageView el onLoadingCancelled sería llamado y la carga no se completaría. También creé los objetos ClusterMarkerTarget y ClusterItemMarkerTarget que contienen un Marcador, ImageView y mapa de bits para los generadores de Iconos. También los pongo en HashSets myClusterItemMarkerTargets y myClusterMarkerTargets para evitar que se garbagecollected.

    Tal vez pueda ser de utilidad para alguien.

    Aquí algunos código:

      @Override protected void onClusterItemRendered(ReportItem clusterItem, Marker marker) { final ClusterItemMarkerTarget pm_ClusterItem = new ClusterItemMarkerTarget(marker); myClusterItemMarkerTargets.add(pm_ClusterItem); HardRefSimpleImageLoadingListener loadingListener = new HardRefSimpleImageLoadingListener() { @Override public void onLoadingFailed(String s, View view, FailReason failReason) { myClusterItemMarkerTargets.remove(pm_ClusterItem); } @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { mClusterItemImageView.setImageBitmap(bitmap); pm_ClusterItem.myIcon_cluster = mClusterItemIconGenerator.makeIcon(); pm_ClusterItem.mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(pm_ClusterItem.myIcon_cluster)); myClusterItemMarkerTargets.remove(pm_ClusterItem); } @Override public void onLoadingCancelled(String s, View view) { myClusterItemMarkerTargets.remove(pm_ClusterItem); } }; ImageLoader.getInstance().displayImage(clusterItem.picPath, pm_ClusterItem.myClusterItemImageView , loadingListener ); } @Override protected void onClusterRendered(Cluster<ReportItem> cluster, Marker marker) { int i=0; clustersize = cluster.getSize(); final ClusterMarkerTarget pm_Cluster = new ClusterMarkerTarget(marker, cluster); myClusterMarkerTargets.add(pm_Cluster); for (ReportItem r : cluster.getItems()) { // Draw 1 at most. if (i == 1 ) { break; } HardRefSimpleImageLoadingListener loadingListener = new HardRefSimpleImageLoadingListener() { @Override public void onLoadingFailed(String s, View view, FailReason failReason) { myClusterMarkerTargets.remove(pm_Cluster); } @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { mClusterImageView.setImageBitmap(bitmap); // = (ImageView) view; //pm.myClusterImageView; pm_Cluster.myIcon_clusterItem = mClusterIconGenerator.makeIcon(String.valueOf(clustersize)); pm_Cluster.myMarker.setIcon(BitmapDescriptorFactory.fromBitmap(pm_Cluster.myIcon_clusterItem)); myClusterMarkerTargets.remove(pm_Cluster); } @Override public void onLoadingCancelled(String s, View view) { myClusterMarkerTargets.remove(pm_Cluster); } }; ImageLoader.getInstance().displayImage(r.picPath, pm_Cluster.myClusterImageView, loadingListener); i++; } } 

    Más:

     //Set for holding a reference to marker targets --> targets won't get carbage collected during looping and loading images Set<ReportRenderer.ClusterItemMarkerTarget> myClusterItemMarkerTargets = new HashSet<>(); Set<ReportRenderer.ClusterMarkerTarget> myClusterMarkerTargets = new HashSet<>(); 

    Más:

     public ReportRenderer(ClusterManager<ReportItem> mClusterManager, GoogleMap map) { super(MyApplication.getContext(), map, mClusterManager); mDimension = (int) MyApplication.getContext().getResources().getDimension(R.dimen.custom_report_image); mPadding = (int) MyApplication.getContext().getResources().getDimension(R.dimen.custom_report_padding); // initialize cluster icon generator View multiReport = inflater.inflate(R.layout.multi_report, null); mClusterImageView = (ImageView) multiReport.findViewById(R.id.image_report); mClusterIconGenerator = new IconGenerator(MyApplication.getContext()); mClusterIconGenerator.setContentView(multiReport); // initialize cluster item icon generator mClusterItemImageView = new ImageView(MyApplication.getContext()); mClusterItemImageView.setLayoutParams(new ViewGroup.LayoutParams(mDimension, mDimension)); mClusterItemImageView.setPadding(mPadding, mPadding, mPadding, mPadding); mClusterItemIconGenerator = new IconGenerator(MyApplication.getContext()); mClusterItemIconGenerator.setContentView(mClusterItemImageView); // initialize image loader options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.loading) .showImageForEmptyUri(R.drawable.warning) .showImageOnFail(R.drawable.fail) .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) //.bitmapConfig(Bitmap.Config.RGB_565) .build(); config = new ImageLoaderConfiguration.Builder(MyApplication.getContext()) .defaultDisplayImageOptions(options) .build(); ImageLoader.getInstance().init(config); } 

    Más:

     //cluster marker with image loaded by Ultimate Image Loader class ClusterMarkerTarget { Marker myMarker; ImageView myClusterImageView; public ClusterMarkerTarget(Marker marker, Cluster<ReportItem> cluster) { myMarker = marker; View multiReport = inflater.inflate(R.layout.multi_report, null); myClusterImageView = (ImageView) multiReport.findViewById(R.id.image_report); } } //cluster item marker with image loaded by Ultimate Image Loader class ClusterItemMarkerTarget { Marker mMarker; ImageView myClusterItemImageView; public ClusterItemMarkerTarget(Marker marker) { mMarker = marker; myClusterItemImageView = new ImageView(MyApplication.getContext());//mClusterItemImageView; myClusterItemImageView.setLayoutParams(new ViewGroup.LayoutParams(mDimension, mDimension)); int padding = (int) MyApplication.getContext().getResources().getDimension(R.dimen.custom_report_padding); myClusterItemImageView.setPadding(padding, padding, padding, padding); } } 

    y finalmente:

      class HardRefSimpleImageLoadingListener extends SimpleImageLoadingListener { public ImageView mView; @Override public void onLoadingStarted(String imageUri, View view) { mView = (ImageView) view; } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.