0

いくつかの .png ファイルでマップにオーバーレイを追加しています。正常に動作しますが、ビットマップ サイズが VM 予算を超えているというエラーがスローされることがあります。リストビューに画像を追加するときにこの同じ問題が発生したとき、SoftReferenceを適用して解決しました。しかし、マップビューにオーバーレイを追加するためにそれを適用する方法がわかりません。アイデアをください。ありがとう

このようにオーバーレイを追加します

public ItemizedOverlayMarker(Drawable defaultMarker, Context context) {
    super(boundCenterBottom(defaultMarker));
    mContext = context;
}

@Override
protected OverlayItem createItem(int i) {
    return mOverlays.get(i);
}

@Override
public int size() {
    return mOverlays.size();
}
public void addOverlay(OverlayItem overlay) {
    mOverlays.add(overlay);
    populate();
}

次のように ItamizerOverlay を呼び出します。

final List<Overlay> mapOverlaysResult = mapView.getOverlays();
Drawable drawableResult = getResources().getDrawable(R.drawable.pin_pink);
final ItemizedOverlayMarker itemizedoverlayResult = new ItemizedOverlayMarker(drawableResult, this);

for (int i = 0; i < Constants.listOfPlaces.size(); i++) {

    GeoPoint geoPoint = new GeoPoint((int)(Double.parseDouble(latitude) * 1E6), (int)(Double.parseDouble(longitude) * 1E6));
    OverlayItem overlayitem = new OverlayItem(geoPoint, name, vicinity);
    itemizedoverlayResult.addOverlay(overlayitem);
                }
4

1 に答える 1

-1

最初に画像をファイルオブジェクトとして変換します

以下の関数を渡すと、ビットマップが返されます..

private Bitmap decodeFile(File f)
    {
        try
        {
            //decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f),null,o);

            //Find the correct scale value. It should be the power of 2.
            final int REQUIRED_SIZE=70;
            int width_tmp=o.outWidth, height_tmp=o.outHeight;
            int scale=1;
            while(true)
            {
                if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                    break;
                width_tmp/=2;
                height_tmp/=2;
                scale*=2;
            }

            //decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize=scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } 
        catch (FileNotFoundException e) {}
        return null;
    }
于 2012-12-10T10:10:10.820 に答える