Glide是一个快速和有效的开源图像加载Android框架,内存和磁盘缓存,和资源汇集成一个简单和易于使用的界面。
Glide支持抓取、解码和显示视频照片,图片,动画gif。Glide包含一个灵活的api,允许开发者插入任何网络协议。默认情况下Glide使用自定义基于HttpUrlConnection协议,但是也包含了替代google的实用库Google's Volley project 或者Square's OkHttp library的的图片加载框架
Glide的主要重点是使滚动列表的任何图像尽可能平稳和快速,但Glide在您几乎任何需要获取,大小,和显示网络图像情况下也有效的。
你可以从GitHub's releases page.下载一个jar包
或者使用Gradle:
repositories {
mavenCentral()
}
dependencies {
compile 'com.github.bumptech.glide:glide:3.6.0'
compile 'com.android.support:support-v4:19.1.0'
}
Or Maven:
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>3.6.0</version>
<type>aar</type>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r7</version>
</dependency>
根据您的混淆器配置和使用,您可能需要在proguard.cfg加入以下代码:
-keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; }
Checkout the GitHub wiki for pages on a variety of topics, and see the javadocs.
简单的用例如下:
// 在一个界面上的简单ImageView加载图片:
@Override
public void onCreate(Bundle savedInstanceState) {
...
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
}
// 在listview 的Adapter的getView方法中的使用:
@Override
public View getView(int position, View recycled, ViewGroup container) {
final ImageView myImageView;
if (recycled == null) {
myImageView = (ImageView) inflater.inflate(R.layout.my_image_view,
container, false);
} else {
myImageView = (ImageView) recycled;
}
String url = myUrls.get(position);
Glide.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.crossFade()
.into(myImageView);
return myImageView;
}
Support for OkHttp and Volley is provided by integration libraries you can optionally include as dependencies. The integration libraries are available via Maven or the releases page.
For instructions on including either the OkHttp or the Volley integration libraries, see the Integration Libraries wiki page.
Glide 要求的最小sdk版本为10
你可以设置使用InternalCacheDiskCacheFactory磁盘高速缓存的大小:
new GlideBuilder(context)
.setDiskCache(new InternalCacheDiskCacheFactory(context, yourSizeInBytes));
设置磁盘高速缓存的位置也是可能的。
您可以使用内置的InternalCacheDiskCacheFactory私有内部缓存目录放置您的应用程序缓存:
new GlideBuilder(context)
.setDiskCache(new InternalCacheDiskCacheFactory(context, cacheDirectoryName, yourSizeInBytes));
您还可以使用内置的ExternalCacheDiskCacheFactory放置你的应用程序缓存在sd卡上公共缓存目录:
new GlideBuilder(context)
.setDiskCache(new ExternalCacheDiskCacheFactory(context, cacheDirectoryName, yourSizeInBytes));
如果你想使用其他一些自定义的位置,您还可以实现theDiskCache。自己的工厂接口,并使用DiskLruCacheWrapper在所需的位置创建一个新的缓存:
new GlideBuilder(context)
.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
File cacheLocation = getMyCacheLocation();
cacheLocation.mkdirs();
return DiskLruCacheWrapper.get(cacheLocation, yourSizeInBytes);
}
});
);
GlideBuilder类可以设置Glide'sMemoryCache and BitmapPool的大小和实现。
默认大小是由MemorySizeCalculator类。MemorySizeCalculator类通过考虑设备给定的可用内存和屏幕大小想出合理的默认大小。如果你想调整Glide的默认设置,您可以构建自己的实例,
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
如果你想要动态调整滑动时的内存占用您的应用程序的某些阶段,你可以选择一个MemoryCategory和通过使用Glide的setMemoryCategory()方法:
Glide.get(context).setMemoryCategory(MemoryCategory.HIGH);
Glide的用来保存在内存中的内存缓存资源,使其马上可用,而不必执行I / O。
您可以使用GlideBuilder的setMemoryCache()方法来设置大小和/或实现你希望使用内存缓存。GlideLruResourceCache类的默认实现。通过LruResourceCache构造函数,你可以设置一个自定义的最大的内存字节大小:
new GlideBuilder(context)
.setMemoryCache(new LruResourceCache(yourSizeInBytes));
Glide's bitmap pool用于各种不同的大小的Bitmap重复使用以其显著减少以及避免垃圾回收Bitmap分配而造成的图像被销毁。
您可以使用GlideBuilder的setBitmapPool()方法来设置位图的大小和/或实现池。LruBitmapPool类的是Glide的默认实现。LruBitmapPool类使用一个LRU算法保留最近使用Bitmap的大小。你可以通过LruBitmapPool构造函数设置一个自定义的最大内存字节大小:
new GlideBuilder(context)
.setBitmapPool(new LruBitmapPool(sizeInBytes));
GlideBuilder类还可以设置一个全局缺省首选Bitmap规格。
默认情况下Glide使用RGB_565,因为它只需要两个字节,比使用高质量和系统默认ARGB_8888节省一半的内存。然而RGB_565在某些图像条带会有问题,也不支持透明度。
如果在您的应用程序有图像条带问题和/或你想要尽可能高的图像质量,您可以使用GlideBuilder setDecodeFormat setDecodeFormat方法。设置Glide 的Bitmap 配置为ALWAYS_ARGB_8888:
new GlideBuilder(context)
.setDecodeFormat(DecodeFormat.ALWAYS_ARGB_8888);