封装图片加载框架Glide使用

Posted 风之叶语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装图片加载框架Glide使用相关的知识,希望对你有一定的参考价值。

一直在用UIL( android-Universal-Image-Loader)加载图片,自我感觉加载使用还不错,后来同事告诉我有个新玩意Glide,于是我就搜了下这个东西,发现确实好用太多了,在说Glide框架之前,先来看看一些主流的图片框架,这样你也可以去搜搜别的框架,然后学到东西也能写个文章来分享下。

 

图片主流加载框架:

名称

描述

Android Universal Image Loader

一个强大的加载,缓存,展示图片的库

Picasso

一个强大的图片下载与缓存的库

Fresco

一个用于管理图像和他们使用的内存的库

Glide

一个图片加载和缓存的库

 

 

Android Universal Image Loader

ImageLoder的配置很多,所以灵活度较高。

Picasso

Square公司的开源项目可以与旗下的各种框架整合使用,例如okhttp。

Fresco

Facebook公司出品的一个功能强大的框架,其内置的SimpleDraweeView可以实现很多种图片样式,其在5.0以下的内存优化很好。

Glide

Gilde的使用很像是Picasso,所以你掌握了他们其中一个的话,另一个很快就能掌握了,这个是谷歌官方推荐使用的图片加载框架,它与Picasso的不同点在于内存上的优化,Picasso默认的bitmap格式为ARGB_8888,而Gilde的Bitmap格式为RGB_565,所以Picasso的内存消耗要比Gilde的消耗大上一半。

开始使用Gilde

1.基本使用

首先我们来加载一张很简单的网络图片

 代码:

package com.yckj.project.activity;

import com.bumptech.glide.Glide;
import com.yckj.project.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class LoadPictureActivity extends Activity
	private ImageView imageView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_imageview);
		imageView = (ImageView) findViewById(R.id.img);//初始化View
		String url = "http://neitui123-data.stor.vipsinaapp.com/neitui/company/104654/photo_icon.png";
		Glide.with(this).load(url).into(imageView);//加载图片
	
布局文件:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="loading_image" />

</LinearLayout>

2.其他使用方法

其余的使用方法有很多,所以这里我直接给出封装好的工具类,如果你有兴趣也可以自己手动来使用下

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;

import android.content.Context;
import android.widget.ImageView;

/**
 * 开源图片框架Gilde工具类
 */
public class GildeUtils 
	/**
	 * 加载图片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 */
	public static void loadImage(String url, Context context, ImageView imageView) 
		Glide.with(context).load(url).into(imageView);
	

	/**
	 * 
	 * 是否禁止磁盘缓存加载图片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 * @param type
	 *            缓存的类型
	 *            <li>磁盘缓存全部 DiskCacheStrategy.ALL</li>
	 *            <li>磁盘禁止缓存DiskCacheStrategy.NONE</li>
	 */
	public static void loadImage(String url, Context context, ImageView imageView, DiskCacheStrategy type) 
		Glide.with(context).load(url).diskCacheStrategy(type).into(imageView);
	

	/**
	 * 
	 * 是否禁止内存缓存加载图片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 * @param skipMemoryCache
	 *            禁止内存缓存 true为禁止
	 */
	public static void loadImage(String url, Context context, ImageView imageView, boolean skipMemoryCache) 
		Glide.with(context).load(url).skipMemoryCache(skipMemoryCache).into(imageView);
	

	/**
	 * 
	 * 是否禁止内存/磁盘缓存加载图片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 * @param type
	 *            缓存的类型
	 *            <li>磁盘缓存全部 DiskCacheStrategy.ALL</li>
	 *            <li>磁盘禁止缓存DiskCacheStrategy.NONE</li>
	 * @param skipMemoryCache
	 *            禁止内存缓存 true为禁止
	 */
	public static void loadImage(String url, Context context, ImageView imageView, DiskCacheStrategy type,
			boolean skipMemoryCache) 
		Glide.with(context).load(url).skipMemoryCache(skipMemoryCache).diskCacheStrategy(type).into(imageView);
	

	/**
	 * 清除内存中的缓存 必须在UI线程中调用
	 * 
	 * @param context
	 */
	public static void clearMemory(Context context) 
		Glide.get(context).clearMemory();
	

	/**
	 * 清除磁盘中的缓存 必须在后台线程中调用,建议同时clearMemory()
	 * 
	 * @param context
	 */
	public static void clearDiskCache(Context context) 
		Glide.get(context).clearDiskCache();
	
	
	/**
	 * 优先级加载图片
	 * @param url
	 * @param context
	 * @param imageView
	 * @param priority  优先级  Priority.LOW/Priority.HIGH
	 */
	public static void loadImageWithPriority(String url, Context context, ImageView imageView,Priority priority) 
		Glide.with(context).load(url).priority(priority).into(imageView);
	

运行效果:



Github地址:https://github.com/bumptech/glide


参考文章:

http://www.spotty.com.cn/archives/361/

http://blog.csdn.net/richiezhu/article/details/46968569

 

以上是关于封装图片加载框架Glide使用的主要内容,如果未能解决你的问题,请参考以下文章

Glide 系列 图片加载框架对比

图片加载Glide的使用以及简单封装

android glide的框架使用

Android框架之Volley与Glide

glide4.11.0封装gfilib优化gif图片加载

图片加载框架之Glide和Picasso