1

Web から 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);
}
}
4

3 に答える 3

1

lazyLoaderが画像をダウンロードし、それらをchache(2レベルキャッシュ:メモリとディスク上)に配置し、画像の準備ができたらオーバーレイに通知して、ビューを更新する間、デフォルトの画像をオーバーレイドローアブルとして使用することをお勧めします。

于 2012-11-05T14:40:50.357 に答える
1

全体的なアプローチは正しいですが、実装方法の詳細は改善することができます。

Improvement 1

画像をダウンロードするonPostExecute()たびに、新しいItemizedOverlayオブジェクトを作成し、それに単一のアイテムを追加しています。ItemizedOverlay一般に、unique を使用してすべてのアイテムを追加する方が効率的です。

  • 最初の画像をロードする前に作成ItemizedOverlayして追加するMapView.getOverlays().add()
  • 代わりにImageLoad受け取るようにクラスを変更しますItemizedOverlayMapView
  • 新しいものをonPostExecute()作成してOverlayItem追加するItemizedOverlay

ItemizedOverlayこれにより、複数のアイテムが含まれた1 つのみが作成されます。あなたのコードではItemizedOverlays、それぞれ1つの画像を持つ複数のものがあります。

Improvement 2

Web からダウンロードした画像のサイズを変更していません。それらがすべて適切なサイズであると確信していない限り、オーバーレイに追加する前にサイズを強制する必要があります。そうしないと、より多くのメモリを使用することになり、ユーザーが期待するものとは異なる、画面全体を覆う画像を取得する可能性があります。

Bitmapメソッドを使用してサイズを変更できますBitmap.createScaledBitmap()

よろしく。

于 2012-11-13T10:28:04.340 に答える
0

この方法を試すことができます....リンクを参照してください..これは画像の遅延読み込みのデモです。ここでは、初めて画像をダウンロードしてキャッシュをSDカードに保存します。そのため、Web からマーカーをロードするのに時間がかかることはありません。

http://developand.blogspot.in/2010/11/lazy-loading.html

于 2012-11-09T10:14:00.927 に答える