Android Maps Utility: images de l'URL

J'utilise l'excellente bibliothèque de l'application Android Maps pour afficher sur la carte des marqueurs personnalisés avec des clusters. Cela fonctionne très bien et il est très facile à personnaliser.

Mon problème est de savoir comment modifier les ressources locales de la démo (R.drawable.image_demo) aux images d'une URL. J'utilise Universal Image Loader pour charger ces images sur l'imageView async, mais les problèmes sont que les images ne sont pas chargées sur le marqueur correspondant.

  • Lorsque onBindViewHolder est appelé et comment cela fonctionne?
  • Comment implémenter un tiroir de navigation Android extensible avec des subitems?
  • Comment puis-je désinstaller Android Studio et le SDK Android?
  • Comment SetDrawingCacheEnabled d'Android () fonctionne-t-il?
  • Comment activer la vérification de peluches Android pour l'annotation @Nullable?
  • ExpandableListView Group View Expand Default
  • Quelqu'un connait-il un exemple?

    C'est le code où l'image est téléchargée et chargée dans la classe DefaultClusterRender. Merci d'avance.

    @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()); } 

    One Solution collect form web for “Android Maps Utility: images de l'URL”

    J'ai eu un problème similaire à l'aide de l'UIL et toutes les images n'ont pas été chargées. Chaque fois que je dirigeais l'activité de la carte et que j'avais zoomé dans les clusters, il y avait différents marqueurs / clusters qui n'avaient aucune image. Seuls les icônes de marqueur / cluster ont été affichés.

    Enfin, après deux jours d'essai et d'essai, cela fonctionne bien. Temporairement, j'avais changé la bibliothèque de Picasso pour voir si cela pouvait fonctionner, mais j'avais des problèmes similaires là-bas et je ne pouvais pas le faire. En plus de Picasso, toutes les images chargées à partir du Web (URL) ont été tournées de 90 degrés. Je ne pouvais pas comprendre pourquoi. Selon certains messages que j'ai trouvés sur le Web, il pourrait être nécessaire de faire quelque chose avec le périphérique, j'utilise le Samsung Galaxy S5 pour tester. Mais pas sûr….

    Voici quelques notes sur la façon dont je l'ai fait: j'ai créé un HardRefSimpleImageLoadingListener avec un ImageView qui existera jusqu'à ce que le processus de chargement d'UIL soit terminé. Sans sa référence difficile, ImageView, onLoadingCancelled serait appelé et le chargement ne serait pas terminé. J'ai également créé les objets ClusterMarkerTarget et ClusterItemMarkerTarget qui contiennent un marqueur, ImageView et un bitmap pour les générateurs d'icônes. Je les ai également mis dans HashSets myClusterItemMarkerTargets et myClusterMarkerTargets pour éviter que les choses ne soient collectées.

    Peut-être que cela peut être utile pour quelqu'un.

    Voici un code:

      @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++; } } 

    plus:

     //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<>(); 

    plus:

     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); } 

    plus:

     //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); } } 

    et enfin:

      class HardRefSimpleImageLoadingListener extends SimpleImageLoadingListener { public ImageView mView; @Override public void onLoadingStarted(String imageUri, View view) { mView = (ImageView) view; } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.