gpt4 book ai didi

Android-Maps-Extensions 异步加载标记图像

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:43 25 4
gpt4 key购买 nike

我正在尝试将图像(从服务器下载)显示为 Google map 上的 map 标记。我正在使用 Android-Maps-Extensions,因为我对 Google Map-Utils 的性能不满意。

现在我想知道如何使用 AME 异步加载 map 标记图像。如果图像不是集群,则任务是显示图像本身。如果是簇,我想显示第一个标记的图像和簇中元素的数量。

到目前为止,我已经完成了以下工作:

1) 设置 map 聚类器

private void setupMapClusterer() {
mClusterOptions = new EClusterOptionsProvider(getContext());
ClusteringSettings clusteringSettings = new ClusteringSettings();
clusteringSettings.addMarkersDynamically(true);
clusteringSettings.clusterOptionsProvider(mClusterOptions);
mMap.setClustering(clusteringSettings);
}

2) 创建集群选项提供程序

public EClusterOptionsProvider(Context context) {
mClusterOptions = new ClusterOptions();
mContext = context;
mIconGenerator = new IconGenerator(context);

// Inflate Layout
View markerView = LayoutInflater.from(context).inflate(R.layout.map_marker, null);
mImageView = (ImageView) markerView.findViewById(R.id.map_marker_image);
mTextView = (TextView) markerView.findViewById(R.id.map_marker_text);

// Setup Icon Generator
mIconGenerator.setContentView(markerView);
}

public Bitmap createIcon(Bitmap bmp, String text) {
mImageView.setImageBitmap(bmp);
mTextView.setText(text);
return mIconGenerator.makeIcon();
}

@Override
public ClusterOptions getClusterOptions(List<Marker> list) {
// Get Bitmap from first marker
Marker first = list.get(0);
mClusterOptions.icon(BitmapDescriptorFactory.fromBitmap(mIconGenerator.makeIcon()));
return mClusterOptions;
}

这给了我一个 map ,其中集群有我的自定义 View (这是正确的),但我不知道在哪里下载图像以及如何将它们放入单个标记,尤其是集群。

当然我不想提前下载所有图片(我们说的是 500 多张)图片。

旁节点:我正在使用 Volley 以异步方式对图像进行 dl。

最佳答案

我创建了使用集群和异步加载标记的简单示例。
希望你能在这里找到一些有用的东西。 https://github.com/pengrad/android-maps-async-markers

我们将使用 Glide 加载图标,我发现它比 Picasso 更稳定。
为要添加到 map 的每个标记调用 loadIconMarker。

MarkerOptions markerOptions = ...
// you should pass some icon before new loaded, or leave default one
//markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.default_marker));
Marker marker = mMap.addMarker(markerOptions);
loadMarkerIcon(marker);


private void loadMarkerIcon(final Marker marker) {
Glide.with(this).load("http://www.myiconfinder.com/uploads/iconsets/256-256-a5485b563efc4511e0cd8bd04ad0fe9e.png")
.asBitmap().fitCenter().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);
marker.setIcon(icon);
}
});
}

创建 ClusterIcon 有点难。这是我的 ClusterOptionsProvider。
我使用基本位图 R.drawable.m1 并在其上添加代表簇中标记数量的文本。

public class ClusterIconProvider implements ClusterOptionsProvider {

Resources resources;
Paint paint;
Bitmap base;

public ClusterIconProvider(Resources resources) {
this.resources = resources;

paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(15);

base = BitmapFactory.decodeResource(resources, R.drawable.m1);
}

@Override
public ClusterOptions getClusterOptions(List<Marker> list) {
Bitmap bitmap = base.copy(Bitmap.Config.ARGB_8888, true);

Rect bounds = new Rect();
String text = String.valueOf(list.size());
paint.getTextBounds(text, 0, text.length(), bounds);
float x = bitmap.getWidth() / 2.0f;
float y = (bitmap.getHeight() - bounds.height()) / 2.0f - bounds.top;

Canvas canvas = new Canvas(bitmap);
canvas.drawText(text, x, y, paint);
BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);

return new ClusterOptions().anchor(0.5f, 0.5f).icon(icon);
}
}

关于Android-Maps-Extensions 异步加载标记图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32277467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com