上一篇文章介绍了如何基于Glide进行二次封装。 基于Glide的二次封装
更多代码可以查询本人GitHub:欢迎阅读,star点起来。 Glide二次封装库源码
本篇文章将详细讲述如何使用。
#初始化 在gradle中添加如下配置
compile 'com.libin.imageloader:ImageLoader:1.0.3'
在Application中:
ImageLoader.init(getApplicationContext());
为了防止oom,加入如下代码,清理内存:
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
ImageLoader.trimMemory(level);
}
@Override
public void onLowMemory() {
super.onLowMemory();
ImageLoader.clearAllMemoryCaches();
}
#混淆 在proguard-rules中添加如下
-dontwarn okio.**
#API详解 ##一.入口方法
该方法返回SingleConfig.ConfigBuilder
ImageLoader.with(this)
asBitmap(BitmapListener bitmapListener) // 使用bitmap不显示到imageview into(View targetView) //加载到imageview中去
##三.加载图片的分辨率—override 在不添加此方法的时候,系统会默认加载所需大小的图片,此方法用于改变加载图片的分辨率,并不是改变图片大小。
override(int oWidth, int oHeight)
##四.缩略图—thumbnail 在没有完全加载出来图片时候先显示规定大小的缩略图,如果直接加载出来图片,则不现实缩略图。缩略图不能与圆角矩形同时使用。
thumbnail(float thumbnail)
##五.加载Gif
ImageLoader.with(this)
.url("https://isparta.github.io/compare-webp/image/gif_webp/gif/1.gif")
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test4);
注: 这里在使用的时候要添加.diskCacheStrategy(DiskCacheStrategy.SOURCE)
不然会出现加载网络gif速度慢或者不显示的情况
##六.加载JPEG
ImageLoader.with(this)
.url("https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=2796659031,1466769776&fm=80&w=179&h=119&img.JPEG")
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test5);
##七.加载png
ImageLoader.with(this) .url("http://s1.dwstatic.com/group1/M00/86/4A/81beb00a44bc52b4fdd46285de8f8f00.png")
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test3);
##八.加载jpg
ImageLoader.with(this)
.url("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490944508&di=671845045c66356487c1a539c4ed0717&imgtype=jpg&er=1&src=http%3A%2F%2Fattach.bbs.letv.com%2Fforum%2F201606%2F27%2F185306g84m4gsxztvzxjt5.jpg")
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test2);
##九.加载webP
ImageLoader.with(this)
.url("https://p.upyun.com/docs/cloud/demo.jpg!/format/webp")
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test6);
注:目前仅支持静态webp,暂不支持动态webp 了解更多webp相关知识可以参考下面这篇文章: WebP原理和Android支持现状介绍
##十.加载六种源图片 ###1.加载网络图片(url)
ImageLoader.with(this)
.url("https://p.upyun.com/docs/cloud/demo.jpg!/format/webp")
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test6);
###2.加载资源图片(res)
ImageLoader.with(this)
.res(R.drawable.jpeg_test)
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test8);
###3. 加载ContentProvider资源(content)
content(“content://media/external/images/media/139469”)
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
long aLong = 0;
if (cursor != null && cursor.moveToFirst()) {
aLong = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID));
}
ImageLoader.with(this)
.content("content://media/external/images/media/"+aLong)
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test10);
###4.加载SD卡资源(file)----支持文件路径和文件
.file(“file://”+Environment.getExternalStorageDirectory().getPath()+"/图片名称.图片格式") .file(new File(getFilesDir(),图片名称.图片格式))
ImageLoader.with(this)
.file("file://"+ Environment.getExternalStorageDirectory().getPath()+"/SHARE_IMG2.PNG")
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test11);
###5.加载raw资源文件(raw)
.raw(“android.resource://包名/raw/”+R.raw.raw_1)
ImageLoader.with(this)
.raw(RAW_PATH_S+getPackageName()+RAW_PATH_E+R.raw.jpeg_test)
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test14);
###6.加载asserts资源文件(asserts)
asserts(“file:///android_asset/图片名称.图片格式”)
ImageLoader.with(this)
.asserts(ASSERTS_PATH+IMG_NAME_C)
.placeHolder(R.mipmap.ic_launcher)
.scale(ScaleMode.FIT_CENTER)
.into(iv_test13);
##十一.占位图—placeHolder 在没有加载出来之前显示的图片,
ImageLoader.with(this).placeHolder(R.mipmap.ic_launcher).into(View)
##十二.请求优先级 — priority 加载图片的请求优先级
.priority(PriorityMode.PRIORITY_LOW) //低 .priority(PriorityMode.PRIORITY_NORMAL) //正常 .priority(PriorityMode.PRIORITY_HIGH) // 高 .priority(PriorityMode.PRIORITY__IMMEDIATE ) // 立即
ImageLoader.with(this).priority(int priority).into(View)
##十三.拉伸模式—scale
.scale(ScaleMode.CENTER_CROP) // CENTER_CROP等比例缩放图片,直到图片的狂高都大于等于ImageView的宽度,然后截取中间的显示 ; .scale(ScaleMode.FIT_CENTER) // FIT_CENTER 等比例缩放图片,宽或者是高等于ImageView的宽或者是高 默认:FIT_CENTER
##十四.错误图—error 加载出错时候的显示的图片
ImageLoader.with(this).error(R.mipmap.ic_launcher).into(View)
##十五.磁盘缓存—diskCacheStrategy
ImageLoader.with(this).diskCacheStrategy(DiskCacheStrategy.RESULT).into(View)
DiskCacheStrategy.RESULT // 缓存transformate后的数据 DiskCacheStrategy.SOURCE // 缓存原始数据 DiskCacheStrategy.ALL // 缓存以上两种 DiskCacheStrategy.NONE // 不缓存
缓存之后在data/data/包名/cache下可以看到如下文件:
##十六.动画效果 ---- animate()
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
view.setAlpha( 0f );
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
fadeAnim.setDuration( 2500 );
fadeAnim.start();
}
};
ImageLoader.with(this).url(url)..animate(animationObject).into(View);
.animate(Animation animation) .animate(ViewPropertyAnimation.Animator animator) .animate(int animationId)
##十七.加载多边形----圆/正方形/圆角
.asSquare() 正方形
ImageLoader.with(this)..asSquare().into(View);
.rectRoundCorner(int rectRoundRadius) 圆角
ImageLoader.with(this).rectRoundCorner(50).into(View);
.asCircle() 圆形
ImageLoader.with(this)..asCircle().into(View);
’
##十八.滤镜效果 ###高斯模糊—blur
blur(int blurRadius)
ImageLoader.with(this).url(url).blur(20).into(View);
###混色—colorFilter
colorFilter(int filteColor)
ImageLoader.with(this).colorFilter(R.color.colorAccent).into(View);
###亮度—brightnessFilter level = (0~1)
brightnessFilter(float level)
ImageLoader.with(this).brightnessFilter(20).into(View);
###黑白—grayscaleFilter
grayscaleFilter()
ImageLoader.with(this).grayscaleFilter().into(View);
###漩涡—.swirlFilter
.swirlFilter()
ImageLoader.with(this).swirlFilter().into(View);
###油画—.toonFilter
.toonFilter()
ImageLoader.with(this).toonFilter().into(View);
###墨画—sepiaFilter
.sepiaFilter()
ImageLoader.with(this).sepiaFilter().into(View);
###锐化—contrastFilter constrasrLevel = (0~1)
.contrastFilter(float constrasrLevel)
ImageLoader.with(this).contrastFilter(0.4f).into(View);
###胶片—invertFilter
.invertFilter()
ImageLoader.with(this).invertFilter().into(View);
###马赛克—pixelationFilter pixelationLevel = (0~100)
.pixelationFilter(float pixelationLevel)
ImageLoader.with(this)..pixelationFilter(0.4f).into(View);
###素描—.sketchFilter
…sketchFilter()
ImageLoader.with(this)..sketchFilter().into(View);
###映晕—vignetteFilter
.vignetteFilter()
ImageLoader.with(this).vignetteFilter().into(View);
##十九.https是否忽略校验—ignoreCertificateVerify 默认不忽略
ImageLoader.with(this).ignoreCertificateVerify(true).into(View);
##二十.自定义View----加载本地多边形图片 想要了解更多多边形图片相关知识,可以参考本人之前的博客: Android自定义View【实战教程】4⃣️----BitmapShader详解及圆形、圆角、多边形实现 ###参数解读 ####三种类型----type type:circle(圆形)/round(圆角)/multi(多边形) ####多边形角的个数----angleCount (integer) ####开始绘制的角度----currentAngle (integer) ####圆角的度数----borderRadius (dimension)
<com.ecarx.image.imageutil.MultiView
android:layout_width="300dp"
android:layout_height="300dp"
android:padding="30dp"
lb:angleCount="5"
lb:type="multi"
android:src="@drawable/b000"
/>
<com.ecarx.image.imageutil.MultiView
android:layout_width="200dp"
android:layout_height="200dp"
lb:borderRadius="10dp"
lb:type="round"
android:src="@drawable/b000"
/>
<com.ecarx.image.imageutil.MultiView
android:layout_margin="30dp"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
lb:type="circle"
android:src="@drawable/b000"
/>
更多代码可以查询本人GitHub:欢迎阅读,star点起来。 Glide二次封装库源码