Glide框架的基本使用

Glide 框架下载地址:    https://github.com/bumptech/glide

1、环境配置

首先在Android studio中导入依赖

    
    
compile 'com.github.bumptech.glide:glide:3.7.0'

需要support-v4库的支持,如果你的项目没有support-v4库(项目默认已经添加了),还需要添加support-v4依赖:

    
    
compile 'com.android.support:support-v4:23.3.0'

然后配置混淆:

    
    
//不混淆所有的GlideModule
-keep public class * implements com.bumptech.glide.module.GlideModule

-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}

记得在清单文件中添加相应的权限:

    
    
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2、基本使用
    
    
Glide.with(this)
.load(url)//加载图片
.placeholder(R.mipmap.ic_launcher)//正在加载时的图片
.error(R.mipmap.ic_launcher)//加载错误时的图片
.into(glide_image);
.transform(new CircleTransform(this)) //通过Glide的TransForMation 自定义圆形图片的bitmap
Glide.with()使用
  1. with(Context context):使用Application上下文,Glide请求将不受Activity/Fragment生命周期控制。
  2. with(Activity activity):使用Activity作为上下文,Glide的请求会受到Activity生命周期控制。
  3. with(FragmentActivity activity):Glide的请求会受到FragmentActivity生命周期控制。
  4. with(android.app.Fragment fragment):Glide的请求会受到Fragment 生命周期控制。
  5. with(android.support.v4.app.Fragment fragment):Glide的请求会受到Fragment生命周期控制。

Glide基本本可以load任何可以拿到的媒体资源,如: 
  • load(String string)
  •       
          
    load SD卡资源:load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg")
    load assets资源:load("file:///android_asset/f003.gif")
    load raw资源:load("Android.resource://com.frank.glide/raw/raw_1")
    load("android.resource://com.frank.glide/raw/"+R.raw.raw_1)
    load drawable资源:load("android.resource://com.frank.glide/drawable/news")
    load("android.resource://com.frank.glide/drawable/"+R.drawable.news)
    load ContentProvider资源:load("content://media/external/images/media/139469")
    load http资源:load("https://img-my.csdn.net/uploads/201508/05/1438760757_3588.jpg")
    load https资源:load("https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp")
     
当然,load不限于String类型,还可以: 
  • load(File file):@param file:The File containing the image。
  • load(Integer resourceId):@param resourceId :the id of the resource containing the image。可以用R.drawable或R.mipmap
  • load(Uri uri):@param uri:The Uri representing the image. Must be of a type handled by UriLoader
  • load(byte[] model):@param model:the data to load.
  • loadFromMediaStore(Uri uri):@param uri:The uri representing the media.
  • load(T model):@param model:The model the load.
  • load(URL url):deprecated

3、其他使用
禁止内存缓存:
   
   
Glide.skipMemoryCache(true)

清除内存缓存:
   
   
// 必须在UI线程中调用
Glide.get(context).clearMemory();

禁止磁盘缓存:
   
   
Glide.diskCacheStrategy(DiskCacheStrategy.NONE)

清除磁盘缓存:
   
   
// 必须在后台线程中调用,建议同时clearMemory()
Glide.get(applicationContext).clearDiskCache();

获取缓存大小:
   
   
new GetDiskCacheSizeTask(textView).execute(new File(getCacheDir(), DiskCache.Factory.DEFAULT_DISK_CACHE_DIR));
    
    
class GetDiskCacheSizeTask extends AsyncTask<File, Long, Long> {
private final TextView resultView;
 
public GetDiskCacheSizeTask(TextView resultView) {
this.resultView = resultView;
}
 
@Override
protected void onPreExecute() {
resultView.setText("Calculating...");
}
 
@Override
protected void onProgressUpdate(Long... values) { /* onPostExecute(values[values.length - 1]); */ }
 
@Override
protected Long doInBackground(File... dirs) {
try {
long totalSize = 0;
for (File dir : dirs) {
publishProgress(totalSize);
totalSize += calculateSize(dir);
}
return totalSize;
} catch (RuntimeException ex) {
final String message = String.format("Cannot get size of %s: %s", Arrays.toString(dirs), ex);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
resultView.setText("error");
Toast.makeText(resultView.getContext(), message, Toast.LENGTH_LONG).show();
}
});
}
return 0L;
}
 
@Override
protected void onPostExecute(Long size) {
String sizeText = android.text.format.Formatter.formatFileSize(resultView.getContext(), size);
resultView.setText(sizeText);
}
 
private static long calculateSize(File dir) {
if (dir == null) return 0;
if (!dir.isDirectory()) return dir.length();
long result = 0;
File[] children = dir.listFiles();
if (children != null)
for (File child : children)
result += calculateSize(child);
return result;
}
}

指定资源的优先加载顺序:
   
   
//优先加载
Glide
.with(context)
.load(heroImageUrl)
.priority(Priority.HIGH)
.into(imageViewHero);
//后加载
Glide
.with(context)
.load(itemImageUrl)
.priority(Priority.LOW)
.into(imageViewItem);

先显示缩略图,再显示原图:
   
   
//用原图的1/10作为缩略图
Glide
.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.thumbnail(0.1f)
.into(iv_0);
//用其它图片作为缩略图
DrawableRequestBuilder<Integer> thumbnailRequest = Glide
.with(this)
.load(R.drawable.news);
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.thumbnail(thumbnailRequest)
.into(iv_0);

对图片进行裁剪、模糊、滤镜等处理: 
推荐使用独立的图片处理库: wasabeef/glide-transformations ,使用也很简单:
   
   
compile 'jp.wasabeef:glide-transformations:2.0.0'
之后我们就可以使用GenericRequestBuilder或其子类的 transform() bitmapTransform() 方法设置图片转换了:
   
   
//圆形裁剪
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new CropCircleTransformation(this))
.into(iv_0);
//圆角处理
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new RoundedCornersTransformation(this,30,0, RoundedCornersTransformation.CornerType.ALL))
.into(iv_0);
//灰度处理
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new GrayscaleTransformation(this))
.into(iv_0);
//其它变换...

4、基于Glide的优秀库

1.glide-transformations

一个基于Glide的transformation库,拥有裁剪,着色,模糊,滤镜等多种转换效果。

2.GlidePalette

一个可以在Glide加载时很方便使用Palette的库。



Glide框架就介绍到这了,详细使用,请参考以下资料:

中文教程: https://mrfu.me/2016/02/27/Glide_Getting_Started/
详谈高图片加载框架Glide -应用篇: http://www.jianshu.com/p/cea08d72ad4c 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发中,有很多基础框架可以帮助开发者快速构建应用程序。其中一些常用的基础框架包括AndroidFire和MVPArms。AndroidFire是一个新闻阅读App框架,基于Material Design、MVP、RxJava、Retrofit和Glide等主流框架,可以快速开发一个App。\[1\]而MVPArms是一个整合了许多主流开源项目的Android MVP快速集成框架,包括Mvp、Dagger2、RxJava、RxAndroid、Rxlifecycle、RxCache、RxPermissions、RxErroHandler、Retrofit、Okhttp、AndroidAutoSize、Gson、Butterknife、AndroidEventBus、Timber、Glide、LeakCanary等。\[2\]这些基础框架提供了网络请求、图片加载、数据库操作等常用功能,可以大大提高开发效率。此外,系统应用层也包含了一系列使用Java编写的核心程序包,开发者可以通过调用框架层的接口或者使用JNI与C/C++进行交互来完成自己的业务逻辑。\[3\] #### 引用[.reference_title] - *1* *2* [Android 常用开发框架](https://blog.csdn.net/nnmmbb/article/details/126161671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android基本框架笔记](https://blog.csdn.net/qq_28609735/article/details/106917220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值