Glide 的基本使用
导入引用:项目中引入Glide图片框架:repositories{mavenCentral()}dependencies{compile'com.github.bumptech.glide:glide:3.7.0'compile'com.android.support:support-v4:19.1.0'}1.如果你的项目使用了Volley:dependencies{compile'com.github.bumptech.glide:volley-integration:1.3.1'compile'com.mcxiaoke.volley:library:1.0.5'}然后在你的Application的onCreate加入Glide.get(this).register(GlideUrl.class,InputStream.class,newVolleyUrlLoader.Factory(yourRequestQueue));2.如果你的项目使用OkHttp:dependencies{compile'com.github.bumptech.glide:okhttp-integration:1.3.1'compile'com.squareup.okhttp:okhttp:2.4.0'}然后在你的Application的onCreate加入Glide.get(this).register(GlideUrl.class,InputStream.class,newOkHttpUrlLoader.Factory(newOkHttpClient()));
3.Glide的使用:Glide.with(viewHolder.p_w_picpathView.getContext())//不光接受Context,还接受Activity和Fragment.load(url)//图片的加载地址.diskCacheStrategy(DiskCacheStrategy.ALL)//缓存类型,ALL:让Glide既缓存全尺寸又缓存其他尺寸.error(R.drawable.ic_person)//加载失败是显示的Drawable.placeholder()//loading时的Drawable.animate()//设置load完的动画.centerCrop()//中心切圆,会填满.fitCenter()//中心fit,以原本图片的长宽为主.into(p_w_picpathView);//显示图片的容器
4.加载GIF图片:Glide.with(context).load(url).asGif().into(p_w_picpathView)5.加载Bitmap:可以用在设大图的背景BitmaptheBitmap=Glide.with(context).load(url).asBitmap().into(100,100).//宽、高.get();6.缩略图Thumbnail:缩略图,0.1f就是原本的十分之一Glide.with(context).load(url).thumbnail(0.1f).into(p_w_picpathView)
7.变换图片的形状:Glide.with(getApplicationContext()).load(URL).transform(newCircleTransform(getApplicationContext()))//显示为圆形图片.into(p_w_picpathView);publicclassCircleTransformextendsBitmapTransformation{publicCircleTransform(Contextcontext){super(context);}@OverrideprotectedBitmaptransform(BitmapPoolpool,BitmaptoTransform,intoutWidth,intoutHeight){returncircleCrop(pool,toTransform);}privatestaticBitmapcircleCrop(BitmapPoolpool,Bitmapsource){if(source==null)returnnull;intsize=Math.min(source.getWidth(),source.getHeight());intx=(source.getWidth()-size)/2;inty=(source.getHeight()-size)/2;//TODOthiscouldbeacquiredfromthepooltooBitmapsquared=Bitmap.createBitmap(source,x,y,size,size);Bitmapresult=pool.get(size,size,Bitmap.Config.ARGB_8888);if(result==null){result=Bitmap.createBitmap(size,size,Bitmap.Config.ARGB_8888);}Canvascanvas=newCanvas(result);Paintpaint=newPaint();paint.setShader(newBitmapShader(squared,BitmapShader.TileMode.CLAMP,BitmapShader.TileMode.CLAMP));paint.setAntiAlias(true);floatr=size/2f;canvas.drawCircle(r,r,r,paint);returnresult;}@OverridepublicStringgetId(){returngetClass().getName();}}加载圆形图片时,不能设置.centerCrop(),否则圆形不起作用。是不是所有的Transform都是这样,我没有测试
8.Glide的一下配置,比如图片默认的RGB_565效果,可以创建一个新的GlideModule将Bitmap格式转换到ARGB_8888:
publicclassGlideConfigurationimplementsGlideModule{@OverridepublicvoidapplyOptions(Contextcontext,GlideBuilderbuilder){//Applyoptionstothebuilderhere./***DiskCache缓存配置*///配置缓存大小:InternalCacheDiskCacheFactorybuilder.setDiskCache(newInternalCacheDiskCacheFactory(context,yourSizeInBytes));//配置内存缓存builder.setDiskCache(newInternalCacheDiskCacheFactory(context,cacheDirectoryName,yourSizeInBytes));//配置外部缓存builder.setDiskCache(newExternalCacheDiskCacheFactory(context,cacheDirectoryName,yourSizeInBytes));//自定义配置//IfyoucanfigureoutthefolderwithoutI/O://CallingContextandEnvironmentclassmethodsusuallydoI/O.builder.setDiskCache(newDiskLruCacheFactory(getMyCacheLocationWithoutIO(),yourSizeInBytes));//Incaseyouwanttospecifyacachefolder("glide"):builder.setDiskCache(newDiskLruCacheFactory(getMyCacheLocationWithoutIO(),"glide",yourSizeInBytes));//Incaseyouneedtoquerythefilesystemwhiledeterminingthefolder:builder.setDiskCache(newDiskLruCacheFactory(newCacheDirectoryGetter(){@OverridepublicFilegetCacheDirectory(){returngetMyCacheLocationBlockingIO();}}),yourSizeInBytes);}//如果你要创建一个完全自定义的缓存,可以实现DiskCache.Factory接口,并且使用DiskLruCacheWrapper创建缓存位置builder.setDiskCache(newDiskCache.Factory(){@OverridepublicDiskCachebuild(){FilecacheLocation=getMyCacheLocationBlockingIO();cacheLocation.mkdirs();returnDiskLruCacheWrapper.get(cacheLocation,yourSizeInBytes);}});/***Memorycachesandpools配置*///Size默认是MemorySizeCalculator控制的,可以自定义MemorySizeCalculatorcalculator=newMemorySizeCalculator(context);intdefaultMemoryCacheSize=calculator.getMemoryCacheSize();intdefaultBitmapPoolSize=calculator.getBitmapPoolSize();//如果你想在应用程序的某个阶段动态调整缓存内存,可以通过选择一个memorycategory通过使用setmemorycategory()Glide.get(context).setMemoryCategory(MemoryCategory.HIGH);//MemoryCache可以通过setMemoryCache()方法来设置缓存大小,或者使用自己的缓存;//LruResourceCache是Glide的默认实现,可以通过构造函数自定义字节大小builder.setMemoryCache(newLruResourceCache(yourSizeInBytes));//BitmapPool通过setBitmapPool()设置Bitmap池的大小,LruBitmapPool是Glide的默认实现类,通过该类的构造函数更改大小builder.setBitmapPool(newLruBitmapPool(sizeInBytes));//BitmapFormat通过setDecodeFormat()方法设置设置图片质量builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);@OverridepublicvoidregisterComponents(Contextcontext,Glideglide){//registerModelLoadershere.}}同时在AndroidManifest.xml中将GlideModule定义为meta-datameta-dataandroid:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration"android:value="GlideModule"/>
9.特性你可以做到几乎和Picasso一样多的事情,代码也几乎一样。ImageResizing尺寸//Glide.override(300,200);CenterCropping//Glide.centerCrop();Transforming//Glide.transform(newCircleTransform(context))设置占位图或者加载错误图://Glide.placeholder(R.drawable.placeholder).error(R.drawable.p_w_picpathnotfound)10.混淆文件的配置-keepnamesclasscom.mypackage.GlideConfiguration#ormoregenerally:#-keeppublicclass*implementscom.bumptech.glide.module.GlideModule希望对刚开始使用Glide的猿友们有所帮助,后续使用中有什么问题,我会继续添加的!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。