栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android 异步加载图片的实例代码

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 异步加载图片的实例代码

异步加载图片的主要流程是进行判断缓存中是否存在图片,如果存在则直接返回,如果不存在则进行下载并进行缓存。

以下是建立一个异步下载类:
复制代码 代码如下:

public class AsnycImageLoader {

    //定义一个HashMap进行存放缓存的Image key为String Value为一个弱引用的一个资源文件
    // 图片 为了方便JAVA的回收
    private Map> imageCache = null;
    public AsnycImageLoader() {
        imageCache = new HashMap>();
    }

   
    public Drawable loadDrawable(final String imageUrl, final ImageCallback callback) {
        //进行判断ImageCache中是否存在缓存图片
        if (imageCache.containsKey(imageUrl)) {
            SoftReference softReference = imageCache.get(imageUrl);
            if (softReference.get() != null) {
                return softReference.get();
            }
        }
        //定义操作UI的Handler
        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                callback.imageLoaded((Drawable) msg.obj);
            }
        };

        new Thread(new Runnable() {
            @Override
            public void run() {
                Drawable drawable = loadImageFromUrl(imageUrl);
                imageCache.put(imageUrl, new SoftReference(drawable));
                Message message = handler.obtainMessage(0, drawable);
                handler.sendMessage(message);
            }
        }).start();
        return null;
    }

    //根据URL地址进行获取资源
    protected Drawable loadImageFromUrl(String imageUrl) {
        try {
            return Drawable.createFromStream(new URL(imageUrl).openStream(), "src");
        } catch (Exception e) {
            throw new RuntimeException();
        }
    }

    //回调接口
    public interface ImageCallback {
        public abstract void imageLoaded(Drawable drawable);
    }
}

主Activity:
复制代码 代码如下:

public class LoadImage extends Activity {
    private AsnycImageLoader loader = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loadimages);

        loader = new AsnycImageLoader();

        loadImage("https://www.jb51.net/images/icon-partners.png", R.id.image1);
        loadImage("https://www.jb51.net/images/icon-dev.png", R.id.image2);
        loadImage("http://pic28.jb51.net/20130421/12302174_231210305323_2.jpg", R.id.image3);


    }

    public void loadImage(String url, int id) {
        final ImageView imageView = (ImageView) findViewById(id);
        Drawable cacheImage = loader.loadDrawable(url, new AsnycImageLoader.ImageCallback() {
            @Override
            public void imageLoaded(Drawable drawable) {
                imageView.setImageDrawable(drawable);
            }
        });
        if (cacheImage != null) {
            imageView.setImageDrawable(cacheImage);
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/165350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号