좋은 하루입니다. 클러스터 매니저가있는 Google지도가 있습니다. 클러스터 하나를 사용하여 클러스터 된 마커를 그릴 수 있습니다. 어쨌든 클러스터 항목 인 클러스터 관리자로부터 메소드 콜백을 받았습니다. render.Inside 그 콜백 내 마커에 사용자 정의 이미지를 적용하고 있습니다 : 마커 안에있는 사용자 이미지. 피카소가 비트 맵 로딩을 처리하는 데 가장 좋았고 동시에 두통을 많이 겪었습니다. 피카소의 Target
클래스를 사용하고 있습니다. 비트 맵 콜백을 시작하려면 OnPreLoad,OnFail,OnBitmapLoaded
입니다. 문제는 첫 번째 클러스터 항목에서 onBitmapLoaded
이 호출되지 않고 두 번째로 터치되지 않으면 호출되지 않는다는 것입니다. 처음에는 아무 것도 발생하지 않으며 OnPreLoad
을 제외한 콜백이 트리거되지 않습니다. 인터넷 검색 결과 나는 위대한 피카소가 수업에 대한 약한 언급을하고 있음을 발견했다. LL 구글의 예 : 대상 참조가 강한 지 (방법에서 클래스의 initialazation을 가져오고 다음과 같은 내 클래스 내에서 클래스를 초기화하기) 만드는이 시점에서피카소 타겟은 가비지 수집되었습니다
@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());
}
내가 같은 결과를 얻을 .... 때때로 비트 맵로드 때로는 not.Mostly ... 어쨌든 나는 다음과 같이 내 자신의 클래스에 인터페이스를 구현하려하지 :
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이 역시 작동하지 않습니다 .. 똑같은 결과 ... 그래서 e 친애하는 친구 당신이 내게 작동 예제를 줄 수 있습니까? 최대한 멀리 내가 할 수있는이 문제는 주로 내부 루프 및 내 onClusterItemRender
일종의 일종의 할 시도하는 사용자가 발생합니다 때마다 트리거되는 말할 수 있습니다 사용자가 볼 수 있으므로 루프가 여러 번 트리거되므로 몇 가지 아이디어를 내게 알려주세요.
중요한 것은 피카소의 메서드를 fetch(),get()
과 같이 사용할 필요가 없다는 것입니다. 앱의 목적에 부합하지 않아도됩니다.
을 저장합니다. 이제 이것을 RxJava와 결합 할 수 있습니다. – gorodechnyj