UIL kullanılarak benzer bir sorun yaşadım, tüm resimler yüklenmedi. Harita aktivitesini her çalıştırdığımda ve kümelere yerleştirdiğimde, görüntü içermeyen farklı işaretleyiciler/kümeler vardı. Sadece standart işaretleyici/küme simgeleri gösterildi.
Son iki gün denemeden ve denemeden sonra iyi çalışıyor. Geçici olarak çalışıp çalışamayacağını görmek için Picasso kütüphanesine geçtim ama orada benzer problemler yaşadım ve bunu yapamadım. Ayrıca Picasso ile web'den yüklenen tüm görüntüler (URL) 90 derece döndürüldü. Nedenini anlayamadım. Web'de bulduğum bazı yayınlara göre cihazla bir şeyler yapmak zorunda kalabilir, test için Samsung Galaxy S5 cihazını kullanıyorum. Ama emin değil ....
İşte bazı notlar nasıl yaptım: UIL yükleme işlemi tamamlanana kadar var olacak bir ImageView ile bir HardRefSimpleImageLoadingListener
yarattım. Sabit referansı olmadan ImageView
onLoadingCancelled çağrılır ve yükleme tamamlanmayacaktır. Ayrıca Simge jeneratörleri için bir İşaretçi, Resim Görünümü ve bitmap içeren ClusterMarkerTarget
ve ClusterItemMarkerTarget
nesnelerini oluşturdum. Ayrıca onları çöp toplanmasını engellemek için myClusterItemMarkerTargets
ve myClusterMarkerTargets
numaralı HashSet'lere koydum.
Belki biri için kullanılabilir. İşte
bazı kod:
@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++;
}
}
daha:
//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<>();
daha:
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);
}
daha:
//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);
}
}
ve son olarak:
class HardRefSimpleImageLoadingListener extends SimpleImageLoadingListener {
public ImageView mView;
@Override
public void onLoadingStarted(String imageUri, View view) {
mView = (ImageView) view;
}
}
Görüntüyü bir yere yükleyip sonra görüntülemeniz gerekir. UIL kullanıyor musunuz? – Raghunandan
Evet, UIL kullanıyorum. UIL görüntüler önbellekleri saklar ve bu yüzden endişelenmeyeceğim. Sorun, görüntünün yüklendiği görüntü görüntüsünün doğru görüntü görüntüsü olmamasıdır. Ama görüntü iyi indiriyor ve yükler! mImageView.setImageBitmap (loadedImage); – Pelanes
Aynı problemim var, nasıl çözdünüz? Teşekkürler –