在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。
特点
(1)使用简单 (2)可配置度高,自适应程度高 (3)支持常见图片格式 : Jpg png gif webp (4)支持多种数据源: 网络、本地、资源、Assets 等 (5)高效缓存策略: 支持Memory和Disk图片缓存,默认Bitmap格式采用RGB_565,内存使用至少减少一半. (6)生命周期集成: 根据Activity/Fragment生命周期自动管理请求 (7)高效处理Bitmap : 使用Bitmap Pool使Bitmap复用,主动调用recycle回收需要回收的Bitmap,减小系统回收压力.
功能API介绍:
1)简单使用:
Glide .with(this) .load("http://xxx.com/source/a.png") .into(imageView);123412342)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生命周期控制。
3)load()的使用
Glide基本可以load任何可以拿到的媒体资源
SD卡资源: load(“file://”+ Environment.getExternalStorageDirectory().getPath()+”/test.jpg”)assets资源: load(“file:///android_asset/3.gif”)raw资源: load(“Android.resource://com.frank.glide/raw/raw_1”)或load(“android.resource://com.frank.glide/raw/”+R.raw.raw_1)drawable资源: load(“android.resource://com.veyron.glide/drawable/news”)或load(“android.resource://comveyron.glide/drawable/”+R.drawable.news)ContentPRovider资源: load(“content://media/external/images/media/139469”)http资源: load(“http://img.my.csdn.NET/uploads/201508/05/1438760757_3588.jpg“)https资源: load(“https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp“)此外,load不限于string类型:
load(Uri uri),load(File file),load(Integer resourceId),load(URL url),load(byte[] model),load(T model),loadFromMediaStore(Uri uri)。 114)重要功能
(1)禁止内存缓存: .skipMemoryCache(true)(2)清除内存缓存: // 必须在UI线程中调用 Glide.get(context).clearMemory();(3)禁止磁盘缓存: .diskCacheStrategy(DiskCacheStrategy.NONE) (4)清除磁盘缓存: // 必须在后台线程中调用,建议同时clearMemory() Glide.get(applicationContext).clearDiskCache(); (5)获取缓存大小: 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;}@Overrideprotected void onPreExecute() { resultView.setText("Calculating...");}@Overrideprotected void onProgressUpdate(Long... values) { /* onPostExecute(values[values.length - 1]); */ }@Overrideprotected 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;}@Overrideprotected 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;}}(6)指定资源的优先加载顺序://优先加载 Glide .with(context) .load(heroImageUrl) .priority(Priority.HIGH) .into(imageViewHero); //后加载 Glide .with(context) .load(itemImageUrl) .priority(Priority.LOW) .into(imageViewItem);(7)先显示缩略图,再显示原图://用原图的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);(8)对图片进行裁剪、模糊、滤镜等处理:具体看demo源码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495961234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495965)部分api介绍:
补充:
CenterCrop CenterCrop()是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内并且裁剪额外的部分。ImageView 可能会完全填充,但图像可能不会完整显示。FitCenter fitCenter() 也是裁剪技术,即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。12341234使用步骤:
1)在build.gradle中添加依赖:
compile 'com.github.bumptech.glide:glide:3.7.0'112)如果你的项目没有support-v4库,还需要添加support-v4依赖:
compile 'com.android.support:support-v4:23.3.0'113)如果使用变换,可以添加一个自定义的变换库 添加依赖:
compile 'jp.wasabeef:glide-transformations:2.0.1' // If you want to use the GPU Filterscompile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0' 123123Demo
ExampleForGlide
新闻热点
疑难解答