gpt4 book ai didi

android - 从网络加载 ItemizedOverlays 标记

转载 作者:行者123 更新时间:2023-11-29 21:56:05 26 4
gpt4 key购买 nike

我想知道从网络加载 ItemizedOverlay 标记的正确方法是什么,以某种方式使用缓存。

现在我正在下载所有图像并将它们转换为可绘制对象,效果很好,但我想看看是否有更好的方法。

public class ImageLoad extends AsyncTask<String, Bitmap, Bitmap> {
private String url;
private MapView mapView;

public ImageLoad() {
}

public ImageLoad(MapView mapView) {
this.mapView = mapView;
}

protected Bitmap doInBackground(String... params) {
url = params[0];
try {
return BitmapFactory.decodeStream(new URL(url).openConnection().getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

@Override
protected void onPostExecute(Bitmap result) {
Drawable d = new BitmapDrawable(mapView.getContext().getResources(), result);
SimpleItemizedOverlay itemizedOverlay = new SimpleItemizedOverlay(d, mapView);
GeoPoint p = new GeoPoint(32061628, 34774767);
itemizedOverlay.addOverlay(new OverlayItem(p, "zzz", "zzz"));
mapView.getOverlays().add(itemizedOverlay);
mapView.invalidate();
super.onPostExecute(result);
}
}

最佳答案

整体方法是正确的,但您如何实现它的细节可以改进。

改进 1

在您的 onPostExecute() 中,每次您下载图像时,您都会创建一个新的 ItemizedOverlay 对象并向其中添加一个项目。通常,使用唯一的 ItemizedOverlay 并将所有项目添加到它会更有效。

  • 创建 ItemizedOverlay 并在加载第一张图像之前将其添加到 MapView.getOverlays().add()
  • 更改 ImageLoad 类以接收 ItemizedOverlay 而不是 MapView
  • onPostExecute() 中创建一个新的 OverlayItem 并将其添加到 ItemizedOverlay

这样,您将只有一个 ItemizedOverlay,其中包含多个项目。使用您的代码,您有多个 ItemizedOverlays,每个有一个图像。

改进 2

您没有调整从网上下载的图像的大小。除非您确定它们都有合适的尺寸,否则您应该在将它们添加到叠加层之前强制执行尺寸。否则,您将使用更多内存并可能获得覆盖整个屏幕的图像,这不是用户所期望的。

您可以使用方法 Bitmap.createScaledBitmap() 调整 Bitmap 的大小。

问候。

关于android - 从网络加载 ItemizedOverlays 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234097/

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