を割り当てることができませんでしたアプリケーションが過負荷にならないように、クラスタを介して図示されている地図上に約1,500マーカーを有します。これらのブックマークは現在BitmapDescriptorFactory.defaultMarker()として表示されています
ただし、各ドットのコードを変更してマーカーの値を含むカスタムビットマップを表示すると、LG K10 LTEといくつかのモトローラ。ほとんどのアプライアンスは正常に動作します。
私はこの機能を使用する場合、私はすべて1500個のマーカーをレンダリング終える前に、それが次のエラーでクラッシュ:
は「DUPブロブFDを割り当てることができませんでした。」
このエラーの調査では、これはメモリオーバーフローであり、これらのマーカーをLRUキャッシュに保存する必要があると思われますが、クラスタと組み合わせてこれを行うことはできません。
誰でもこれを持っていましたか、この問題を解決するためのアイデアや提案がありましたか?次
がビットマップレンダラのコードスニペットです:
私はものを除き、すべてのマーカーをクラスタを強制的にコードを変更します。また
public class OwnRendring extends DefaultClusterRenderer<MyItem> {
OwnRendring(Context context, GoogleMap map, ClusterManager<MyItem> clusterManager) {
super(context, map, clusterManager);
}
protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) {
markerOptions.snippet(item.getSnippet());
markerOptions.title(item.getTitle());
markerOptions.anchor(0.33f, 1f);
markerOptions.infoWindowAnchor(0.33f,0f);
int cor = (item.getPublico() ? cfgCorPostoPublico : cfgCorPostoPrivado);
String preço = item.getTitle().substring(item.getTitle().length() - 5);
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(createMarker(preço, cor)));
super.onBeforeClusterItemRendered(item, markerOptions);
}
protected boolean shouldRenderAsCluster(Cluster cluster) {
return cfgCluster && cluster.getSize() >= cfgClusterMin;
}
}
@Override
public void onCameraIdle() {mClusterManager.cluster();}
private Bitmap createMarker(String text, int color) {
View markerLayout = getLayoutInflater().inflate(R.layout.custom_marker, null);
ImageView markerImage = markerLayout.findViewById(R.id.marker_image);
TextView markerRating = markerLayout.findViewById(R.id.marker_text);
markerImage.setImageResource(R.drawable.pin_shadow);
markerImage.clearColorFilter();
markerImage.getDrawable().mutate().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
markerRating.setText(text);
markerLayout.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
markerLayout.layout(0, 0, markerLayout.getMeasuredWidth(), markerLayout.getMeasuredHeight());
final Bitmap bitmap = Bitmap.createBitmap(
markerLayout.getMeasuredWidth(),
markerLayout.getMeasuredHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
markerLayout.draw(canvas);
return bitmap;
}