Guten Tag.Ich habe eine Google-Map mit Cluster-Manager.Einfach, wo ich den Cluster zum Zeichnen von Markern gruppiert oder nicht verwenden.Wie auch immer ich einen Methodenrückruf von Cluster-Manager, die das Cluster Element ist rendern.Innerhalb dieses Callbacks verwende ich ein benutzerdefiniertes Bild auf den Marker: Das Benutzerbild innerhalb des Markers.Ich fand Picasso am besten, um Bitmap-Laden zu handhaben und gleichzeitig bekam ich viele Kopfschmerzen. Ich verwende Target
Klasse von Picasso Um die Bitmap-Callbacks zu initiieren: OnPreLoad,OnFail,OnBitmapLoaded
. Das Problem ist, dass auf dem ersten Cluster-Element die onBitmapLoaded
nicht aufgerufen und im Allgemeinen wird es nie aufgerufen, es sei denn, es wurde zum zweiten Mal berührt. Beim ersten Mal passiert nichts außer OnPreLoad
und durch googeln ich fand, dass der große Picasso schwacher Verweis auf die Klasse hält. Ich versuchte a ll die Beispiele der Google: Herstellung der Zielreferenz stark (die initialazation der Klasse von Verfahren bekommen und init die Klasse in meiner Klasse wie die folgt)Picasso Ziel wurde Müll gesammelt
@Override
protected void onClusterItemRendered(MarkerItem clusterItem, Marker marker) {
mMarker = marker;
mMarkerItem = clusterItem;
Picasso.with(mContext).load(clusterItem.getImageUrl()).transform(new CircleTransformation()).into(target);
}
private Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.d(TAG, "onBitmapLoaded: ");
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
Log.d(TAG, "onBitmapFailed: ");
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.d(TAG, "onPrepareLoad: ");
}
};
@Override
protected void onBeforeClusterItemRendered(MarkerItem item, MarkerOptions markerOptions) {
markerOptions.title(item.getTitle());
markerOptions.icon(item.getIcon());
}
An dieser Stelle bekommen ich das gleiche Ergebnis .... manchmal ist die Bitmap geladen und manchmal not.Mostly nicht ... auf jeden Fall habe ich versucht, die Interface-Klasse zu meiner eigenen Klasse zu implementieren, wie folgt:
public class PicassoMarkerView implements com.squareup.picasso.Target {
private static final String TAG = "MarkerRender";
private Bitmap mMarkerBitmap;
private ClusterManager<MarkerItem> mClusterManager;
private MarkerItem mMarkerItem;
private Marker mMarker;
public PicassoMarkerView() {
}
@Override
public int hashCode() {
return mMarker.hashCode();
}
@Override
public boolean equals(Object o) {
if (o instanceof PicassoMarkerView) {
Marker marker = ((PicassoMarkerView) o).mMarker;
return mMarker.equals(marker);
} else {
return false;
}
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap,
mMarkerBitmap.getWidth() - 15, (int) (mMarkerBitmap.getHeight()/1.5 - 15),
false);
mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(overlay(mMarkerBitmap, scaledBitmap, 8, 7)));
Log.d(TAG, "onBitmapLoaded: ");
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
Log.d(TAG, "onBitmapFailed: ");
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.d(TAG, "onPrepareLoad: ");
}
private Bitmap overlay(Bitmap bitmap1, Bitmap bitmap2, int left, int top) {
Bitmap res = Bitmap.createBitmap(bitmap1.getWidth(), bitmap1.getHeight(),
bitmap1.getConfig());
Canvas canvas = new Canvas(res);
canvas.drawBitmap(bitmap1, new Matrix(), null);
canvas.drawBitmap(bitmap2, left, top, null);
return res;
}
public void setMarkerBitmap(Bitmap markerBitmap) {
this.mMarkerBitmap = markerBitmap;
}
public void setClusterManager(ClusterManager<MarkerItem> clusterManager) {
this.mClusterManager = clusterManager;
}
public void setMarkerItem(MarkerItem markerItem) {
this.mMarkerItem = markerItem;
}
public void setMarker(Marker marker) {
this.mMarker = marker;
}
}
Unfortunatally dies auch nicht funktioniert .. .Same result ... Also bitte e liebe freunde kannst du mir ein funktionierendes beispiel dafür geben? soweit ich googlen konnte, passiert das problem meistens dem benutzer, der versucht, diese interne schleife zu machen und meine onClusterItemRender
irgendeine art von schleife lässt sagen, wie sie jedes mal ausgelöst wird ist sichtbar für Benutzer, also yeah es wird mehrmals ausgelöst und so schnell wie Schleife so geben Sie mir eine Idee bitte und helfen Sie mir ...
Wichtig zu erwähnen, dass ich nicht Methoden von Picasso wie fetch(),get()
als verwenden müssen Sie sind nicht notwendig und entsprechen nicht dem Zweck der App.
meinen Tag gerettet. Jetzt kann ich das mit RxJava kombinieren – gorodechnyj