Android應用List表徵圖非同步載入

來源:互聯網
上載者:User

 

1、建立非同步載入類:

 

 

 

 

 

Java代碼 

import android.graphics.drawable.Drawable;  

import android.os.Handler;  

import android.os.Message;  

import android.widget.ImageView;  

 

import java.io.IOException;  

import java.io.InputStream;  

import java.lang.ref.SoftReference;  

import java.net.MalformedURLException;  

import java.net.URL;  

import java.util.HashMap;  

 

public class AsyncImageLoader {  

    // SoftReference是軟引用,是為了更好的為了系統回收變數  

    private HashMap<String, SoftReference<Drawable>> imageCache;  

 

    public AsyncImageLoader() {  

        imageCache = new HashMap<String, SoftReference<Drawable>>();  

    }  

 

    public Drawable loadDrawable(final String imageUrl, final ImageView imageView,  

            final ImageCallback imageCallback) {  

        if (imageCache.containsKey(imageUrl)) {  

            // 從緩衝中擷取  

            SoftReference<Drawable> softReference = imageCache.get(imageUrl);  

            Drawable drawable = softReference.get();  

            if (drawable != null) {  

                return drawable;  

            }  

        }  

        final Handler handler = new Handler() {  

            public void handleMessage(Message message) {  

                imageCallback.imageLoaded((Drawable) message.obj, imageView, imageUrl);  

            }  

        };  

        // 建立新一個新的線程下載圖片  

        new Thread() {  

            @Override 

            public void run() {  

                Drawable drawable = loadImageFromUrl(imageUrl);  

                imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));  

                Message message = handler.obtainMessage(0, drawable);  

                handler.sendMessage(message);  

            }  

        }.start();  

        return null;  

    }  

 

    public static Drawable loadImageFromUrl(String url) {  

        URL m;  

        InputStream i = null;  

        try {  

            m = new URL(url);  

            i = (InputStream) m.getContent();  

        } catch (MalformedURLException e1) {  

            e1.printStackTrace();  

        } catch (IOException e) {  

            e.printStackTrace();  

        }  

        Drawable d = Drawable.createFromStream(i, "src");  

        return d;  

    }  

 

    // 回調介面  

    public interface ImageCallback {  

        public void imageLoaded(Drawable imageDrawable, ImageView imageView, String imageUrl);  

    }  

 

import android.graphics.drawable.Drawable;

import android.os.Handler;

import android.os.Message;

import android.widget.ImageView;

 

import java.io.IOException;

import java.io.InputStream;

import java.lang.ref.SoftReference;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.HashMap;

 

public class AsyncImageLoader {

    // SoftReference是軟引用,是為了更好的為了系統回收變數

    private HashMap<String, SoftReference<Drawable>> imageCache;

 

    public AsyncImageLoader() {

        imageCache = new HashMap<String, SoftReference<Drawable>>();

    }

 

    public Drawable loadDrawable(final String imageUrl, final ImageView imageView,

            final ImageCallback imageCallback) {

        if (imageCache.containsKey(imageUrl)) {

            // 從緩衝中擷取

            SoftReference<Drawable> softReference = imageCache.get(imageUrl);

            Drawable drawable = softReference.get();

            if (drawable != null) {

                return drawable;

            }

        }

        final Handler handler = new Handler() {

            public void handleMessage(Message message) {

                imageCallback.imageLoaded((Drawable) message.obj, imageView, imageUrl);

            }

        };

        // 建立新一個新的線程下載圖片

        new Thread() {

            @Override

            public void run() {

                Drawable drawable = loadImageFromUrl(imageUrl);

                imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));

                Message message = handler.obtainMessage(0, drawable);

                handler.sendMessage(message);

            }

        }.start();

        return null;

    }

 

    public static Drawable loadImageFromUrl(String url) {

        URL m;

        InputStream i = null;

        try {

            m = new URL(url);

            i = (InputStream) m.getContent();

        } catch (MalformedURLException e1) {

            e1.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

        Drawable d = Drawable.createFromStream(i, "src");

        return d;

    }

 

    // 回調介面

    public interface ImageCallback {

        public void imageLoaded(Drawable imageDrawable, ImageView imageView, String imageUrl);

    }

}

 

2、調用方法:www.2cto.com

 

 

 

 

 

Java代碼 

Drawable cachedImage = asyncImageLoader.loadDrawable(wb.getUserIcon(), wh.wbicon,  

            new ImageCallback() {  

 

                @Override 

                public void imageLoaded(Drawable imageDrawable, ImageView imageView, String imageUrl) {  

                    imageView.setImageDrawable(imageDrawable);  

                }  

 

            }); 

 

Drawable cachedImage = asyncImageLoader.loadDrawable(wb.getUserIcon(), wh.wbicon,

            new ImageCallback() {

 

                @Override

                public void imageLoaded(Drawable imageDrawable, ImageView imageView, String imageUrl) {

                    imageView.setImageDrawable(imageDrawable);

                }

 

            });   

 

作者 songfantasy

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.