发出从网址获取的缓存图片?

时间:2011-07-23 03:40:45

标签: android

我正在实现此代码以从网址获取图片。我想缓存这些图像,这样它们就不会被加载,并且每次看不到时都会占用很多带宽。

我将如何使用此功能实现此图像的获取?

//ImageAdapter that gets the URL of the images and put them in a format to be set to gallery
public class ImageAdapter extends BaseAdapter {
    /** The parent context */
    private Context myContext;public ImageAdapter() {
        // TODO Auto-generated constructor stub
    }
    /** URL-Strings to some remote images. */
    public String[] myRemoteImages = {imageUrl,imageUrl2,imageUrl3,imageUrl4};

    /** Simple Constructor saving the 'parent' context. */
    public ImageAdapter(Context c) { this.myContext = c; }

    /** Returns the amount of images we have defined. */
    public int getCount() { return this.myRemoteImages.length; }

    /* Use the array-Positions as unique IDs */
    public Object getItem(int position) { return position; }
    public long getItemId(int position) { return position; }

    /** Returns a new ImageView to
    * be displayed, depending on
    * the position passed. */
    public View getView(int position, View convertView, ViewGroup parent) {
    ImageView i = new ImageView(this.myContext);

    try {
        URL aURL = new URL(myRemoteImages[position]);
        URLConnection conn = aURL.openConnection();

        conn.connect();

        InputStream is = conn.getInputStream();  
        /* Buffered is always good for a performance plus. */
        BufferedInputStream bis = new BufferedInputStream(is);
        /* Decode url-data to a bitmap. */

        Bitmap bm = BitmapFactory.decodeStream(bis);
        bis.close();
        is.close();
        Log.v(imageUrl, "Retrieving image");

        /* Apply the Bitmap to the ImageView that will be returned. */
        i.setImageBitmap(bm);
    } catch (IOException e) {
        Log.e("DEBUGTAG", "Remtoe Image Exception", e);
    }

    /* Image should be scaled as width/height are set. */
    i.setScaleType(ImageView.ScaleType.FIT_CENTER);
    /* Set the Width/Height of the ImageView. */
    if(Build.VERSION.SDK_INT >= 11){
        i.setLayoutParams(new Gallery.LayoutParams(450, 300));
    return i;
    }else{
        i.setLayoutParams(new Gallery.LayoutParams(125, 125));
        return i;
    }

    /** Returns the size (0.0f to 1.0f) of the views
    * depending on the 'offset' to the center. */
    public float getScale(boolean focused, int offset) {
        /* Formula: 1 / (2 ^ offset) */
        return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset)));
    }
}

0 个答案:

没有答案