I am using cluster in my map and created custom markers with images and using glide to download images from url and render it to my markers. But what my problem is on first time when my map loaded images are are not rendered to markers. After some zoom in zoom out the map only the glide start to download the images. But I want to download images at first call of map loading.If i use URL stream download it works fine. But that will download every time the images. Anybody please help me to resolve this problem. Here after I have attached my code.
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.maps.android.clustering.Cluster;
import com.google.maps.android.clustering.ClusterItem;
import com.google.maps.android.clustering.ClusterManager;
import com.google.maps.android.clustering.view.DefaultClusterRenderer;
import com.google.maps.android.ui.IconGenerator;
import com.google.maps.android.utils.demo.model.Person;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Demonstrates heavy customisation of the look of rendered clusters.
*/
public class CustomMarkerClusteringDemoActivity2 extends FragmentActivity implements OnMapReadyCallback,ClusterManager.OnClusterClickListener<Person>, ClusterManager.OnClusterInfoWindowClickListener<Person>, ClusterManager.OnClusterItemClickListener<Person>, ClusterManager.OnClusterItemInfoWindowClickListener<Person> {
private ClusterManager<Person> mClusterManager;
private Random mRandom = new Random(1984);
private GoogleMap mMap;
protected int getLayoutId() {
return R.layout.map;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
setUpMap();
}
@Override
protected void onResume() {
super.onResume();
setUpMap();
}
@Override
public void onMapReady(GoogleMap map) {
if (mMap != null) {
return;
}
mMap = map;
startDemo();
}
private void setUpMap() {
((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
}
protected GoogleMap getMap() {
return mMap;
}
/**
* Draws profile photos inside markers (using IconGenerator).
* When there are multiple people in the cluster, draw multiple photos (using MultiDrawable).
*/
private class PersonRenderer extends DefaultClusterRenderer<Person> {
private final IconGenerator mIconGenerator = new IconGenerator(getApplicationContext());
private final IconGenerator mClusterIconGenerator = new IconGenerator(getApplicationContext());
private final ImageView mImageView;
private final ImageView mClusterImageView;
private final int mDimension;
public PersonRenderer() {
super(getApplicationContext(), getMap(), mClusterManager);
View multiProfile = getLayoutInflater().inflate(R.layout.multi_profile, null);
mClusterIconGenerator.setContentView(multiProfile);
mClusterImageView = (ImageView) multiProfile.findViewById(R.id.image);
mImageView = new ImageView(getApplicationContext());
mDimension = (int) getResources().getDimension(R.dimen.custom_profile_image);
mImageView.setLayoutParams(new ViewGroup.LayoutParams(mDimension, mDimension));
int padding = (int) getResources().getDimension(R.dimen.custom_profile_padding);
mImageView.setPadding(padding, padding, padding, padding);
mIconGenerator.setContentView(mImageView);
}
@Override
protected void onBeforeClusterItemRendered(Person person, MarkerOptions markerOptions) {
Glide.with(CustomMarkerClusteringDemoActivity2.this)
.load(person.profilePhoto).asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.fitCenter()
.placeholder(R.drawable.ic_launcher).dontAnimate().into(mImageView);
// URL url = null;
// try {
// url = new URL(person.profilePhoto);
// Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
// mImageView.setImageBitmap(bmp);
// } catch (MalformedURLException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }
Bitmap icon = mIconGenerator.makeIcon();
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(person.name);
}
@Override
protected void onBeforeClusterRendered(Cluster<Person> cluster, MarkerOptions markerOptions) {
// Draw multiple people.
// Note: this method runs on the UI thread. Don't spend too much time in here (like in this example).
List<Drawable> profilePhotos = new ArrayList<Drawable>(Math.min(4, cluster.getSize()));
int width = mDimension;
int height = mDimension;
Bitmap dummyBitmap=null;
Drawable drawable=null;
for (Person p : cluster.getItems()) {
// Draw 4 at most.
if (profilePhotos.size() == 4) break;
try {
dummyBitmap = Glide.with(getApplicationContext()).load(p.profilePhoto)
.asBitmap().into(70,70).get();
} catch (Exception e) {
e.printStackTrace();
}
drawable = new BitmapDrawable(getResources(), dummyBitmap);
drawable.setBounds(0, 0, width, height);
profilePhotos.add(drawable);
}
MultiDrawable multiDrawable = new MultiDrawable(profilePhotos);
multiDrawable.setBounds(0, 0, width, height);
mClusterImageView.setImageDrawable(multiDrawable);
Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize()));
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
}
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
// Always render clusters.
return cluster.getSize() > 1;
}
}
@Override
public boolean onClusterClick(Cluster<Person> cluster) {
// Show a toast with some info when the cluster is clicked.
String firstName = cluster.getItems().iterator().next().name;
Toast.makeText(this, cluster.getSize() + " (including " + firstName + ")", Toast.LENGTH_SHORT).show();
// Zoom in the cluster. Need to create LatLngBounds and including all the cluster items
// inside of bounds, then animate to center of the bounds.
// Create the builder to collect all essential cluster items for the bounds.
LatLngBounds.Builder builder = LatLngBounds.builder();
for (ClusterItem item : cluster.getItems()) {
builder.include(item.getPosition());
}
// Get the LatLngBounds
final LatLngBounds bounds = builder.build();
// Animate camera to the bounds
try {
getMap().animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
@Override
public void onClusterInfoWindowClick(Cluster<Person> cluster) {
// Does nothing, but you could go to a list of the users.
}
@Override
public boolean onClusterItemClick(Person item) {
// Does nothing, but you could go into the user's profile page, for example.
return false;
}
@Override
public void onClusterItemInfoWindowClick(Person item) {
// Does nothing, but you could go into the user's profile page, for example.
}
protected void startDemo() {
getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(9.9252,78.1198), 8f));
mClusterManager = new ClusterManager<Person>(this, getMap());
mClusterManager.setRenderer(new PersonRenderer());
getMap().setOnCameraIdleListener(mClusterManager);
getMap().setOnMarkerClickListener(mClusterManager);
getMap().setOnInfoWindowClickListener(mClusterManager);
mClusterManager.setOnClusterClickListener(this);
mClusterManager.setOnClusterInfoWindowClickListener(this);
mClusterManager.setOnClusterItemClickListener(this);
mClusterManager.setOnClusterItemInfoWindowClickListener(this);
addItems();
mClusterManager.cluster();
}
private void addItems() {
mClusterManager.addItem(new Person(new LatLng(9.9252,78.1198), "Madurai", "https://images.techhive.com/images/article/2016/09/android-old-habits-100682662-primary.idge.jpg"));
mClusterManager.addItem(new Person(new LatLng(13.0827,80.2707), "Chennai", "https://images.techhive.com/images/article/2016/09/android-old-habits-100682662-primary.idge.jpg"));
mClusterManager.addItem(new Person(new LatLng(10.9675,76.9182), "Covai", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSppY02DkBSDtdnf8EVLKm7-n_0AlO1v5NKCcMWeVdzZ0VkIIiECA"));
mClusterManager.addItem(new Person(new LatLng(10.7905,78.7047), "Trichy", "http://4.bp.blogspot.com/-8v_k_fOcfP8/UQIL4ufghBI/AAAAAAAAEDo/9ffRRTM9AnA/s1600/android-robog-alone.png"));
mClusterManager.addItem(new Person(new LatLng(10.3673,77.9803), "Dindigul", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRArxJKW72owkwK0zD60Q_GJiVg36vy80Xf1dBPGBk87AefQa5e"));
// mClusterManager.addItem(new Person(position(), "Yeats", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3Ab0euUF-ClwheIfODe04krTeGIkD-wf-gYQcaZWhAHzD4nOp"));
//
// mClusterManager.addItem(new Person(position(), "John", "http://www.jrtstudio.com/sites/default/files/ico_android.png"));
//
// mClusterManager.addItem(new Person(position(), "Trevor the Turtle", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQmVSoCOR98Vw7iqlm-LWjZ_iTt5ZhvMy8TqUb7zyKNj4VoSWhZ"));
//
// mClusterManager.addItem(new Person(position(), "Teach1", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRuYdYnhMjcvd4hAH3-5hvPavCgb3b_8Rs6UTtviCoOTpIEwvig"));
//
// mClusterManager.addItem(new Person(position(), "Teach2", "http://www.lyps.edu.hk/wp-content/uploads/2014/08/unnamed.png"));
//
// mClusterManager.addItem(new Person(position(), "Teach3", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTVdtXystrbg1tU-WzII4Tbp7oWBgDZ_RmDVpCxTgwGyEEOrh6bxg"));
//
// mClusterManager.addItem(new Person(position(), "Teach4", "https://lh4.ggpht.com/KZpaG6K6Q7JV9CqN7uKfapGwZoK3PLEeZYbALpMO1sY4jJ4FPbYY12Uu-wY2vO9xXZE=w300"));
//
// mClusterManager.addItem(new Person(position(), "Teach5", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTDmE3crCrCt4lnMZPzaPLna3xRZwCG-x1_adS98fRebfU_aYlZXg"));
//
// mClusterManager.addItem(new Person(position(), "Teach6", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRiMaki37C4rnhvKOUXyuIGuDxm-sfNiC-jkqU9WkXx-yj8PvqDvw"));
//
// mClusterManager.addItem(new Person(position(), "Teach7", "https://lh3.ggpht.com/wFQnMKpl6M1JGhG2nfGY5WGiZqWBkKTsGkFLngwQxjKbEBN6bpAh3ljUu3KQVozH0sI=w300"));
//
// mClusterManager.addItem(new Person(position(), "Teach8", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTodrOHInZLLQmkA9H_0OBg472_OROG47GoEB53HFi5O3fZYmi7bA"));
}
private LatLng position() {
return new LatLng(random(51.6723432, 51.38494009999999), random(0.148271, -0.3514683));
}
private double random(double min, double max) {
return mRandom.nextDouble() * (max - min) + min;
}
}
Thanks in advance...
I'm not totally sure what you're asking. It sounds like you make the same load more than once and expect the subsequent calls to hit the cache? If so, see: http://bumptech.github.io/glide/doc/debugging.html#unexpected-cache-misses
Hey sjudd
Thanks for your reply
Actually i am trying to clustering the markers on google map v2 android. there we are getting the marker images from url. I'm using glide lib to handle server images.
I download the marker images with glide inside onClusterItemRender method..
Marker images are downloading properly.. But facing rendering problem. which means when i zoom in zoom out the map, then only the images are showing...
Could you please guide me to resolve this problem?
Finally I got result with the following code :
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.maps.android.clustering.Cluster;
import com.google.maps.android.clustering.ClusterItem;
import com.google.maps.android.clustering.ClusterManager;
import com.google.maps.android.clustering.view.DefaultClusterRenderer;
import com.google.maps.android.ui.IconGenerator;
import com.google.maps.android.utils.demo.model.Person;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Demonstrates heavy customisation of the look of rendered clusters.
*/
public class CustomMarkerClusteringDemoActivity3 extends FragmentActivity implements OnMapReadyCallback,
ClusterManager.OnClusterClickListener<Person>, ClusterManager.OnClusterInfoWindowClickListener<Person>,
ClusterManager.OnClusterItemClickListener<Person>,
ClusterManager.OnClusterItemInfoWindowClickListener<Person> {
private ClusterManager<Person> mClusterManager;
private Random mRandom = new Random(1984);
private GoogleMap mMap;
protected int getLayoutId() {
return R.layout.map;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
setUpMap();
}
@Override
protected void onResume() {
super.onResume();
setUpMap();
}
@Override
public void onMapReady(GoogleMap map) {
if (mMap != null) {
return;
}
mMap = map;
startDemo();
}
private void setUpMap() {
((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this);
}
protected GoogleMap getMap() {
return mMap;
}
/**
* Draws profile photos inside markers (using IconGenerator).
* When there are multiple people in the cluster, draw multiple photos (using MultiDrawable).
*/
private class PersonRenderer extends DefaultClusterRenderer<Person> {
private final IconGenerator mIconGenerator = new IconGenerator(getApplicationContext());
private final IconGenerator mClusterIconGenerator = new IconGenerator(getApplicationContext());
private final ImageView mImageView;
private final ImageView mClusterImageView;
private final int mDimension;
Bitmap icon;
PersonRenderer() {
super(getApplicationContext(), getMap(), mClusterManager);
View multiProfile = getLayoutInflater().inflate(R.layout.multi_profile, null);
mClusterIconGenerator.setContentView(multiProfile);
mClusterImageView = (ImageView) multiProfile.findViewById(R.id.image);
mImageView = new ImageView(getApplicationContext());
mDimension = (int) getResources().getDimension(R.dimen.custom_profile_image);
mImageView.setLayoutParams(new ViewGroup.LayoutParams(mDimension, mDimension));
int padding = (int) getResources().getDimension(R.dimen.custom_profile_padding);
mImageView.setPadding(padding, padding, padding, padding);
mIconGenerator.setContentView(mImageView);
}
@Override
protected void onBeforeClusterItemRendered(Person person, MarkerOptions markerOptions) {
icon = mIconGenerator.makeIcon();
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(person.name);
}
@Override
protected void onClusterItemRendered(Person clusterItem, final Marker marker) {
Glide.with(CustomMarkerClusteringDemoActivity3.this)
.load(clusterItem.profilePhoto)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.thumbnail(0.1f)
.into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
mImageView.setImageDrawable(resource);
icon = mIconGenerator.makeIcon();
marker.setIcon(BitmapDescriptorFactory.fromBitmap(icon));
}
});
}
@Override
protected void onBeforeClusterRendered(Cluster<Person> cluster, MarkerOptions markerOptions) {
// Draw multiple people.
// Note: this method runs on the UI thread. Don't spend too much time in here (like in this example).
List<Drawable> profilePhotos = new ArrayList<>(Math.min(4, cluster.getSize()));
int width = mDimension;
int height = mDimension;
Bitmap dummyBitmap = null;
Drawable drawable;
for (Person p : cluster.getItems()) {
// Draw 4 at most.
if (profilePhotos.size() == 4) break;
try {
dummyBitmap = Glide.with(getApplicationContext()).load(p.profilePhoto).asBitmap().into(70, 70).get();
} catch (Exception e) {
e.printStackTrace();
}
drawable = new BitmapDrawable(getResources(), dummyBitmap);
drawable.setBounds(0, 0, width, height);
profilePhotos.add(drawable);
}
MultiDrawable multiDrawable = new MultiDrawable(profilePhotos);
multiDrawable.setBounds(0, 0, width, height);
mClusterImageView.setImageDrawable(multiDrawable);
Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize()));
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
}
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
// Always render clusters.
return cluster.getSize() > 1;
}
}
@Override
public boolean onClusterClick(Cluster<Person> cluster) {
// Show a toast with some info when the cluster is clicked.
String firstName = cluster.getItems().iterator().next().name;
Toast.makeText(this, cluster.getSize() + " (including " + firstName + ")", Toast.LENGTH_SHORT).show();
// Zoom in the cluster. Need to create LatLngBounds and including all the cluster items
// inside of bounds, then animate to center of the bounds.
// Create the builder to collect all essential cluster items for the bounds.
LatLngBounds.Builder builder = LatLngBounds.builder();
for (ClusterItem item : cluster.getItems()) {
builder.include(item.getPosition());
}
// Get the LatLngBounds
final LatLngBounds bounds = builder.build();
// Animate camera to the bounds
try {
getMap().animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
@Override
public void onClusterInfoWindowClick(Cluster<Person> cluster) {
// Does nothing, but you could go to a list of the users.
}
@Override
public boolean onClusterItemClick(Person item) {
// Does nothing, but you could go into the user's profile page
return false;
}
@Override
public void onClusterItemInfoWindowClick(Person item) {
// Does nothing, but you could go into the user's profile page
}
protected void startDemo() {
getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(9.9252, 78.1198), 5f));
mClusterManager = new ClusterManager<>(this, getMap());
mClusterManager.setRenderer(new PersonRenderer());
getMap().setOnCameraIdleListener(mClusterManager);
getMap().setOnMarkerClickListener(mClusterManager);
getMap().setOnInfoWindowClickListener(mClusterManager);
mClusterManager.setOnClusterClickListener(this);
mClusterManager.setOnClusterInfoWindowClickListener(this);
mClusterManager.setOnClusterItemClickListener(this);
mClusterManager.setOnClusterItemInfoWindowClickListener(this);
mClusterManager.clearItems();
addItems();
mClusterManager.cluster();
}
private void addItems() {
mClusterManager.addItem(new Person(new LatLng(9.9252, 78.1198), "Madurai", "https://images.techhive.com/images/article/2016/09/android-old-habits-100682662-primary.idge.jpg"));
mClusterManager.addItem(new Person(new LatLng(13.0827, 80.2707), "Chennai", "https://images.techhive.com/images/article/2016/09/android-old-habits-100682662-primary.idge.jpg"));
mClusterManager.addItem(new Person(new LatLng(10.9675, 76.9182), "Covai", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSppY02DkBSDtdnf8EVLKm7-n_0AlO1v5NKCcMWeVdzZ0VkIIiECA"));
mClusterManager.addItem(new Person(new LatLng(10.7905, 78.7047), "Trichy", "http://4.bp.blogspot.com/-8v_k_fOcfP8/UQIL4ufghBI/AAAAAAAAEDo/9ffRRTM9AnA/s1600/android-robog-alone.png"));
mClusterManager.addItem(new Person(new LatLng(10.3673, 77.9803), "Dindigul", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRArxJKW72owkwK0zD60Q_GJiVg36vy80Xf1dBPGBk87AefQa5e"));
mClusterManager.addItem(new Person(new LatLng(11.7905, 78.7047), "UN_KNOWN", "data:image/jpeg;base64,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"));
mClusterManager.addItem(new Person(new LatLng(12.7905, 78.7047), "UN_KNOWN", "data:image/jpeg;base64,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"));
mClusterManager.addItem(new Person(new LatLng(13.7905, 78.7047), "UN_KNOWN", "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBw8QDxAPDQ8NDw4PDQ0PDw8NDw8NDQ4PFREWFhURFRUYHSggGBolHRUVITEhJSkrLi4uFx8zODMtNygtLisBCgoKDg0OGxAQGjclIB0vLTcrNy8tLSsvLi0tLS0rLSsrLS8tLSstLSstNS0vLS0rKy0tLS0rLSstLSs3LS0tLP/AABEIAKgBLAMBIgACEQEDEQH/xAAcAAABBQEBAQAAAAAAAAAAAAACAAEDBQYEBwj/xABAEAACAQMBBQUECAQFBAMAAAABAgADBBESBQYTITEiQVFhcTKBkaEHFBVCUmLB0XKiseEjQ4KSwjNT8PEWJDT/xAAaAQEAAwEBAQAAAAAAAAAAAAAAAQIEAwUG/8QALREBAAICAQMCBAQHAAAAAAAAAAECAxEEEiFBEzEyUWHxBVJxoRQigZHR4fD/2gAMAwEAAhEDEQA/AMTFHigKOI0eA4hCDCEAxDEAQxANZIsjWSCBKskWRLJVgSrJVEiWSrAlUSRVkayVYBBYQSJYYgDoj0kUllJYOELoNIKMFzqGc5BA59IYkL11SrSYkZV+a95RuTDHn0nLNaa0mY8IkxWAyyS5dldkFKo2hmXPIA4OMjnOd61QdaDe5h+0j+IxfmNwTLImWM18o9taifxLkfLMkVlYZUhh4g5nSt629pS52WRMs6mWdFraIENe4B4QJWmgOlrioPug9yjvPu69IyZIpG5FQyyNhOqqBkkDAycAnUQO4Z75CwlxzMIDCTsJEwgQsJGRJmEAiBCRBIkhEAiBGYJEkIgmABjQo0DqijxQFHjRxAcQhBEIQCEMQBDEA1kiyMSRYEiyVZEslWBKslWRLJFgTLJFkSyRYEojs4UEsQAOpMHMhsaJuX1HPCU9kfiP4jOWbLGOu5RMpralUrns5Sn49Hb9ppdmbpqyHI0qwI1fePmP3ndsDZys2MdhcFvPwE2dKiOmJ8/m5OTNbSIibMrY7vmmgV3NZ/8AuMiqcAAAcvSKvskeE2Bt5x1qYmbNTLj+KCaahh7vY6nqomb2hu8AS1LKN4r+onplegJXXFlnulMXKtWe0qRLzvZ9E6m+t9inTGpnX/N8EXwY/Acz4Ahf3RqvqICqo006a+xTQdFE1O1NkB1KMOyf/MzH3Fu9F+FU596N+Jf3nu8TkRmvu8949v8AvmvE7RNImkjSJp6iyNpEwkrSNoETCRkSVpG0CMwDJDAMCMwTJDAMASI2IREaB0RR4oCiEUeA8cRhCEAhDEAQxAJZIsjEkWBIslWRLJFgSrJVkSyRYEyw1kayRYHLtGpnTSHWoe1/AOvx/eaDZgCqFWZlgTcMT3BAvpj98zRWDdPGeL+IZJm2vkpZu9h9igH73fqfAcv0Mv7atyyZwW6qiKgxhVA+A6xVboCeTW81tuCttLR7gYnFVqTL7R27cG4p2djQFxdVadSrh6vAo0qKEK1R3wTjLKAADzMgstuVWqVaF1RNvc0HVatIuKqYZQyVEce0jA8jgHkQQCJ25FeRlp6to7Jm06aZmBhJSBlbSuMyztamZ58V7qR7gr2AYTIb17E1020j/ETLIfMd3vnpNNAR07plt6dpWlvpW5uLegz6tArVUplsdSMnzHxnq1wXw9No77XmuvZ5DqyMyNp2bTRVr1VQgoWFRCpBUo41DBHUc5xtPosduqsT81kbSNobSNpcAYBhmRmAJgGGYBgCYJhGCYAmNHMaB1Ro8UBR40eA4jiMI4gEIYgCGIBCSLAENYEiyRZGskWBKskWRLE1cA46nw8JE2iI3I6VkiytG0cNh1wPEHPynTd1gtJ3B6U2IPu5SItExuA9asDa0rwDsU6j0bkjmaYZyabn8vPHv8pbbLqDVTORpLoc55YyOcz+6u0eCSCq1KVRTTrUX/6dWmeqnz8517R2VWsF+tWAe82Uxy1Mc7mxz1Vh3qPHp6dT4WavVaa+fH1+n6qaeoV9r0FyDVXPguX/AKSuuds0j0Yn/SZi9nbToXCa7eqr49pPZq0/4kPP3jI850GrMc4pidTCqbbG1K9CtSvrB1W4pq9FxUpcVKlByCUZQQcalU8iOYnFsOtc1Lmve3lTVVuNGrscNcKMIqL91VGQPUnnzj1K0ZbiavUv6XpeE7aujejxltZX45dofGYandTutrqYpxIel21+MdR8RPPK9SnR3hq3tza17ujU2aFoPSom4NCqhAZAvcSM8/zHxMv6D0xbMzgaj7MzFxtd6RJU5Hep6H9pq4+e+O0T76W6pZS6tTSquDTFHitWuFoDSRbpVuKrpR5cuypA5cs5kLTp2leivcVai504pKM9eS5PzJnK09/DMzSJnytAGkbQ2gGdUozAMMwDAAwTCMEwBMEwjBMBo0eNA6oo+IsQGiiigOIQg5j6oBiEJGGhBoEqw1kQeGHECZZIsgWoJItQQJ1ldYh3rsgBZ2qMABzPWdy1BOvdZ6VO+11CFVipJPcMc/iRiZuVPTjmfkiVv/8AALqogcimuRkAk5mb3l2Xc2lBkrUyEZkCuOajtAkE93d8Z7BT3qoN2AwIHf4x96Etq9hVD6WV6bj346jzGRPExc3LS+vHnx/ZHbxLwbZ1XGJsNgbbqW7BqbYBwGXqrDwImCt2K8gc+cutnu7sqICzsQFUcyTNWfFtEw0e8G7+y7tuNQc7Nuyc66Kk2zN3lqYOUz4ofUGZy8XatgM16aXVv3XFE8Wlj+NR2fRwDOuuWRytTk4PMZB5+7lJrW+qocpUZRjGAce70kUm8Rqe8fX/ACKuhvTbvyfXSb84yvxE7aW0Kb+xURv4WBgbRt7etk1aKaj1ekBTf5cj7xKs7vWjHk9ZfDAUmX6ccx5j9xo6NXzlpY8yJnbTc9uXDvrymO4aXx/K2JcWe51wSM7VuVHmjr/xma/p/m/aUNDfXZ0BB8BMzduaj8KmNVRjjSO718BLdt17akM3N/d1/wAoZwreXaP6TNbU2umv6pZU1oUmOKrg6q1RB7Ss/cD0wMdZGGkXvqvchCKQXIU6hqJ1dNXPr6QTDb5fKRkz6GsREajw6AaA0NpGZIAwDDMAwBMAwzBMATBhQYDRo5jQO0wSZGasA1YEpMYmQmpANSB0ao2qcxqQTVgdWuPxJx8WNxYHbxI/FnBxY3GgWIrQhXlZxo3HgWoryKvVIZKg1dk4cJjWUzz057x+sr+PFx5FqxaNSLVNvBTgVAcY5rqX3EHBz3e6d20t7qj0DSRjgKcc+QJHX5zNNVB6gE+YBkFR8j1OZjvxccTuUaT7O5jB6j+k2m4jUqdyK1z/ANKlTqnH4m0HA9/T3zF2R0sPA8jNxu3ss3FU08hUpUalSox6AKpY/PlOWT4kKm4qFm1Hqc/1joZHU6j0/qTCE5xCAV3kCVOcVdpCDLTHYXVptB1+8ZZU9tkDr85lHvVUeJ8unxnHtfaz1VVM4RQcAcgMnp5zhPFi8o6VjvFvYeaodbeOewstdwt2qtcLdXQwrDKKRpNQZzk/l6euPOcG4W5puqi3Fyp4CsDTpnlxmHefyiezpRVQFQDGACQMDl0A8hOXJz0wR6eL38yTOu0OCnZLjTpBHTmB/SZnffdpaFD63SAQBlFRByXDHAYDu5kfGeiWlqANb9BPL/pO3tFQm0okFcjiEdDg50j3icfw/wBScsTX+v6FWQNeMa0rOPFxp9M6LE1Y3EnBxo/FgdnEja5ycWPxIHVqjapz8SLiQJ9UWZDri1wANxBNeVXHPjG4x8TAtDXgmtKzjHxMbinxPxgWfGjGtKzinxPxjcQ+J+MCzNaDxZW8TzMbXAsuLG4srtcbXAseLG4srtcWqBY8Xzjcbzldri1wLA1vMfGHTOZV653WNTIx3ic8vsLKiOY9RNdsm60AseYZK6YBPNtGAT7yvKZKnO+zq6c8+o5esw3jarvzk8vd6R36QaYjVTKQOWqZy1DJ6pnNUbE6QOetNFuVuhUv6oYr/gKeefvkd3pKGlbO/PoPEz2T6Odo0KNuoYhAEGnke1zwfhjHvnHlZppT+X7DR2uyeAgVVAwAOQ5AeA8p3Wtr3mczbyUWbBYdZW77b20rSgeGcOyagT0VSPaniVxdd51/uUaqpfpM3yW1pNRot/iEYYg8xnuHnPCqt/qYs2osTk9IG3Nrvc1WqMSRk6cn5nzlfrn0/E40Ya/WVohY/XB4H5RfXR4H5Su1xtc1pWX18fhPxEf7QH4T8ZWao2qBafaP5f5v7RvtL8n839pWaotUCz+0/wAn839ovtQ/gH+7+0rMxZgWn2qfwD/cf2i+1j+Af7j+0qsxZgT8aNxZHiLEA+LFxIGIsQC4hi4hg4ixAfWYtZmk2Pum9ReJX7CddJOD7z+gmhsd1LmomuztyKIyOMwFOmceBPNvdmB54VfrpbH8Jga5urrZdxSODUXI8NePiROC5ogj/wCzRR16cROy4/1DnAymqLMstpbL4Y4lJuJROO1yD0yegYfrK2A2Ysx4oDQ6NUqQR/7gxQL+zulcZHXvHeJ3U2yRMojlTlSQfKW9htA/fHT73dMuTFrvCNNTTblIqzzmtrxWHZOfTnCepmZ9aQBgTCWkvr6wQ0IOJE7HQGwJDR2s9uQATo54yeQyek57vaFNB2mHoOZMzd/eGqfBR0H6mXx4ev39jTatvL2tRbA9Zn96942u2CqW0KACT94joB5AYlBFiaKcalLdSdBxFiFiLE0JDiLELEWIA4ixCxFiAOIsQsRYgDFCxFiAMULEWID4ixCxFiAOIsQsRYgDL3YdqtNRc1RkkkUVPTlyNQ+/IHoZSYmp2Ns5r+6srCkSoqmlS1DqlMKWquPMKHPrA9G+jDYH2gwurz/8iOy0aPPFzUTGonxRcgHxPLuIPtIpqFChVCgABQBpA8MeErFoWtmtIIvCShRFGmqkhFpjux07us47rfGzQEhyxGeQGOcDL/SPsekpV6ahS4yQPGZXZm51W44ZFN2Vamp+WFI8Afd85bbT3g+uXAzyXIAHcBPVNm0VSkioABoU8u/I6ytq9UaHhm8W7i0KTqQ/EGvCOmVqJk9gnHI4+M8kuqQR2UcwD2T+U8xPrffTY31m2fhrqrIpZAMZfH3Z8sby2RoXlajnIp1HVT1yoY4+UpjrNe0oVWIsQsR8TqkGIsQ8RYgCq5IHiQJpqVmpp8l5gkADy0/H2pnAJsthP0Pg+fimf+E4Z5mIRKkrbPqagy06qAg4dUdQDg4548cSuN9WOM1HbHIajmfRO5I1Uyp581PzGZ4Htu14V7dUzy4d1cKB5azj5Ymbi8j1ZtWY+FESktKmfbZvUHHjyx8J6Futa7KShVq3dutaoqZXj1Kjpnw0agvj1HdPMNcnr3Tino1HDdRnulsuKb9onSVdWwWYr7JZiv8ADnl8oOmSYixNyUemLTJcRoAaYsQ40AcRYhRQAxFidf1CpjLAJnprIU/DrIqtuy9Ry8RzECHEaPFAaNHigNFFFAlxFiFGgNiNiFGgMJoN0t4KuzruneUUp1HprUXRV1aCrrg4I5g+coJ0UGger7Q+ldrpMVLE02xjNK4FRT54KDEzlC/Fbis9QUdIUotQjXVZjgKvPGBjJJ6cuuZU7LQNynXtCwbTyJX3Kc+4iBI+1Wtrh6bLl6VRkYo6shKnGVYdR5z2j6O98heBaDrpdUOk6skgd3SfPLUiDzJY5yS3MkzW7l7Y+pOa+e0FOn4QNx9Mu970wbG3dkOAarU3ZGOQexkd3MZnh+164qVmdRhcKqg9yqAP0J98tN5NqNc16lZzlnZmJ9TKFjk5ka77DYixHikhYixHigKa7YqEKG7iKTjwOAwI+B+UyUu9jbVCAU6vsjoZwzxMx2RL3D6PAG1HIAwTgn5Txj6SqKrte90kFWrCoCOnaRSfnmaHZ+91O2VirfdYAA8+YxMHtW/avWqV36u2fQdAJi4WG9ctrTHb7Ihygn1jsxJyZEKh8JIJ6cRCxoo8UkNGjxoDRR40Bpqtw9lUKtU1btnWgmrtJ7RKhcqmfvdoeg9ZlZa7L2iERqNRS9Jih0q5psp1qXII7yoK/DwlLxM11A913V3F2ddUWuDbNQ1NppqKr1aoTAIZmfPaOR0x75S7a3LNC9S3oMGWrgprAIwT0YHkZ2bN+lK1p2NKja21ek9GhTpKKiI6YRAoOVPl4TKH6QXa9S6qsSyODjS2MA9JNa9MaEf0pfRubCgl9bhRSLqlzSp50UnbktRM9FJ5EdxIxyPLzCfQP0tb2Uq+wqZor2doOFGv2kFJ1ZsD1UDPnPn6WDRR40Boo8aBPGjxQGktC3eocU1ZvQch6mNFA7F2Q/32pp7yx+GJ0U93azKWo1baow/ylqGnV92tQpPkGJiigRWV41JsMCpBwVYFWB8CDL87aVlwcdIooFRcV1JyJy1b3lgGKKBwVKhMCKKA8IRooDx8RooDxmI74ooDAjzHrE68oopABZKI0UgPFGilgoxMUUBsxsxRQGjq2DmKKBpdhbTpKCtXvE5LlkapyPZz8oooEm823zcU7e3XlRtabJTXzY5ZvUmZ6KKAo0UUBRoooH//2Q=="));
mClusterManager.addItem(new Person(new LatLng(14.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQZ9lSBc0fJisamLRH6rh3MZPRgUCHDStGKt95lVyKzich1uVZK"));
mClusterManager.addItem(new Person(new LatLng(15.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSswFXI-cI7GUJdn6mxVQonQeB_yVjd9UK6dj0fQBFPni1h8S68"));
mClusterManager.addItem(new Person(new LatLng(16.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSxfr-p92GJAwipLE7u0D7jmSe52p5a8FaqpG8VI1eL6c1BbujA"));
mClusterManager.addItem(new Person(new LatLng(17.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSQ0ar3pziPKX7qVuB0IWdQyyDQIsyVM0ndG1tyWeQM1M89QHpY"));
mClusterManager.addItem(new Person(new LatLng(18.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRuYdYnhMjcvd4hAH3-5hvPavCgb3b_8Rs6UTtviCoOTpIEwvig"));
mClusterManager.addItem(new Person(new LatLng(19.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRIJwWmkQ3RUxE4tkCGwK7q86HA_afAonY9Q3ahcc50CZl0xX3r"));
mClusterManager.addItem(new Person(new LatLng(20.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSO6f_BhHnJ26fFLeFi7iciKQthpJoGf2WJ0swKjlh0FVpQ43jL"));
mClusterManager.addItem(new Person(new LatLng(21.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRtJnLEMbVyCp5wD3XB46MPNeO3TLroNM9D0HhxrI5XtY_39Pj9zw"));
mClusterManager.addItem(new Person(new LatLng(22.7905, 78.7047), "UN_KNOWN", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT59HUwuyDfA-WXKy1-2H-cuuEACwVCDzb-cjwjwnic4_9ei6WDuA"));
}
}
This issue has been automatically marked as stale because it has not had activity in the last seven days. It will be closed if no further activity occurs within the next seven days. Thank you for your contributions.
Nice explanation and it works! Thanks satheesh1000.
Thank you satheesh1000 ! I used Picasso to load the icons but your solution was very helpful !
This issue has been automatically marked as stale because it has not had activity in the last seven days. It will be closed if no further activity occurs within the next seven days. Thank you for your contributions.
@satheesh1000 , I tried the same process but on MapFragment but unable to show all images rendered. Only 1st image can able to render.
I only want Marker to be shown the image & clustering should be shown by default due to which if i found clustered Item with Marker then only 1st marker rendered the image. Below is the code for rendered class.
Please help
class PersonRenderer(
private val mContext: Context, map: GoogleMap,
clusterManager: ClusterManager
) :
DefaultClusterRenderer
private val mIconGenerator = IconGenerator(mContext.applicationContext)
private val mClusterIconGenerator = IconGenerator(mContext.applicationContext)
private val mImageView: ImageView
private val mClusterImageView: ImageView
private val mDimension: Int
var icon: Bitmap? = null
init {
val multiProfile = LayoutInflater.from(mContext.applicationContext).inflate(R.layout.multi_profile, null)
mClusterIconGenerator.setContentView(multiProfile)
mClusterImageView = multiProfile.findViewById(R.id.image)
mImageView = ImageView(mContext.applicationContext)
mDimension = mContext.resources.getDimensionPixelSize(R.dimen.custom_profile_image)
mImageView.layoutParams = ViewGroup.LayoutParams(mDimension, mDimension)
val padding = mContext.resources.getDimensionPixelSize(R.dimen.custom_profile_padding)
mImageView.setPadding(padding, padding, padding, padding)
mIconGenerator.setContentView(mImageView)
}
override fun onBeforeClusterItemRendered(hotelInfoAry: HotelInfoAry?, markerOptions: MarkerOptions?) {
super.onBeforeClusterItemRendered(hotelInfoAry, markerOptions)
Timber.i("onBeforeClusterItemRendered")
mImageView.setImageResource(R.drawable.ic_building)
icon = mIconGenerator.makeIcon()
markerOptions!!.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(hotelInfoAry!!.HotelName)
}
override fun onClusterItemRendered(hotelInfoAry: HotelInfoAry?, marker: Marker?) {
super.onClusterItemRendered(hotelInfoAry, marker)
Timber.i("onClusterItemRendered")
Glide.with(mContext.applicationContext).load(hotelInfoAry?.HotelImageURL)
.fitCenter()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.thumbnail(0.25f)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
Timber.i("onLoadFailed")
return true
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
Timber.i("onResourceReady")
mImageView.setImageDrawable(resource)
icon = mIconGenerator.makeIcon()
try {
marker?.setIcon(BitmapDescriptorFactory.fromBitmap(icon))
} catch (e: Exception) {
Timber.i("TAG onResourceReady: '%s'", e.message)
}
return true
}
})
.into(mImageView)
}
override fun onClusterRendered(cluster: Cluster<HotelInfoAry>, marker: Marker) {
val profilePhotos = ArrayList<Drawable>(min(4, cluster.size))
val width = mDimension
val height = mDimension
for (p in cluster.items) {
// Draw 4 at most.
if (profilePhotos.size == 4) break
try {
Glide.with(mContext.applicationContext).load(p?.HotelImageURL)
.fitCenter()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.thumbnail(0.25f)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
Timber.i("onLoadFailed")
return true
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
Timber.i("onResourceReady")
resource?.setBounds(0, 0, width, height)
if(resource!=null)
profilePhotos.add(resource)
val multiDrawable = MultiDrawable(profilePhotos)
multiDrawable.setBounds(0, 0, width, height)
mClusterImageView.setImageDrawable(multiDrawable)
val iconCheck = mClusterIconGenerator.makeIcon(cluster.size.toString())
marker.setIcon(BitmapDescriptorFactory.fromBitmap(iconCheck))
return true
}
})
.into(mImageView)
} catch (e: Exception) {
e.printStackTrace()
}
}
icon = mClusterIconGenerator.makeIcon(cluster.size.toString())
marker.setIcon(BitmapDescriptorFactory.fromBitmap(icon))
}
override fun shouldRenderAsCluster(cluster: Cluster<HotelInfoAry>?): Boolean {
// Always render clusters.
return cluster!!.size > 1
}
Most helpful comment
Finally I got result with the following code :