Glide
是一个快速高效的多媒体管理和图像加载的框架,封装了Android
平台的多媒体的解码,内存和硬盘缓存等,Glide
支持解码、显示视频、图像和GIFs,Glide是基于定制的HttpUrlConnection,
下面是关于Glide的配置和使用。css
配置很简单,只要在Module的Gradle添加依赖便可android
compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:25.3.0'
固然,若是涉及到网络加载图片,记得添加网络权限git
<uses-permission android:name="android.permission.INTERNET" />
Glide支持Activity和Fragment的绑定github
Glide.with(Context context);
Glide.with(Activity activity);
Glide.with(FragmentActivity activity);
Glide.with(Fragment fragment);
将Activity/Fragment做为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致数组
Glide支持网络资源、assets资源、Resources资源、File资源、Uri资源、字节数组缓存
Glide.with(this).load("http://pic9/258/a2.jpg").into(iv); Glide.with(this).load("file:///xxx.jpg").into(iv); Glide.with(this).load(R.mipmap.ic_launcher).into(iv); Glide.with(this).load(file).into(iv); Glide.with(this).load(uri).into(iv); Glide.with(this).load(byte[]).into(iv);
Glide.with(this).load(imageUrl).asBitmap().into(iv);
Glide.with(this).load(imageUrl).asGif().into(iv);
String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; Glide.with(context).load(Uri.fromFile(new File( filePath))).into(iv);
这里须要注意的是,这仅仅对本地视频起做用。若是没有存储在该设备上的视频(如一个网络 URL 的视频),它是不工做的!markdown
Glide.with(this).load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg") .placeholder(R.drawable.ic_launcher) //设置占位图,在加载以前显示 .into(image);
Glide.with(this).load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg") .placeholder(R.drawable.ic_launcher) //设置占位图,在加载以前显示 .error(R.drawable.icon) //在图像加载失败时显示 .into(image);
//先加载缩略图 而后在加载全图 Glide.with(this) .load(imageUrl) .thumbnail(0.1f) .into(iv);
Glide.with(this) .load("http://nm/photo/1f/1f7a.jpg") .crossFade()//动画默认的持续时间是 300毫秒 .into(iv);
crossFade()
有几种重载的方法
crossFade(int duration)
:设置时间
crossFade(Animation animation, int duration)
:设置自定义的动画和时间
crossFade(int animationId, int duration)
: 加载动画资源和时间
Glide.with(this) .load("http://nm/photo/1f/1f7a.jpg") .animate(R.anim.fade_in) .into(iv);
Glide.with(this) .load("http://nm/photo/1f/1f7a.jpg") .dontAnimate() .into(iv);
Glide.with(this).load(url).centerCrop().into(iv);
Glide.with(this).load(url).fitCenter().into(iv);
Glide.with(this) .load(imageUrl) .listener(RequestListener listener) .into(iv);
Glide.with(this) .load("http://nm/photo/1f/1f7a.jpg") .override(300,300) .into(iv);
Glide.with(this) .load("http://nm/photo/1f/1f7a.jpg") .skipMemoryCache(true) .into(iv);
Glide.with(this) .load("http://nm/photo/1f/1f7a.jpg") .diskCacheStrategy(DiskCacheStrategy.ALL) .into(iv); DiskCacheStrategy.ALL //缓存源资源和转换后的资源 DiskCacheStrategy.NONE//不作任何磁盘缓存 DiskCacheStrategy.RESULT //缓存转换后的资源 DiskCacheStrategy.SOURCE //缓存源资源
Glide.get(this).clearDiskCache();//在子线程中进行
Glide.get(this).clearMemory();//能够在主线程
<!--glide缓存目录设置--> <meta-data android:name="包名.widget.GlideModuleConfig" android:value="GlideModule" />
public class GlideModuleConfig implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { //内部存储/Android/data/包名/cache/glide-images builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "glide-images", 2 * 1024 * 1024)); //将默认的RGB_565效果转换到ARGB_8888 builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); } @Override public void registerComponents(Context context, Glide glide) { //不作处理 } }
Glide在Github上还有一个库,能够处理图片效果,好比裁剪、圆角、高斯模糊等等网络
compile 'jp.wasabeef:glide-transformations:2.0.1'
//radius取值1-25,值越大图片越模糊 Glide.with(context).load(url).bitmapTransform(new BlurTransformation(context, radius)).into(iv);
Glide.with(context).load(url).bitmapTransform(new CropCircleTransformation(this)).into(iv);
Glide.with(this).load(url).bitmapTransform(new BlurTransformation(this, 25), new CropCircleTransformation(this)).into(iv);
//若是是四周已是圆角则RoundedCornersTransformation.CornerType.ALL Glide.with(this) .load(url) .bitmapTransform(new RoundedCornersTransformation(this, 30, 0, RoundedCornersTransformation.CornerType.BOTTOM)) .into(iv);