Glide二次封装库的使用
来源:互联网 发布:js 方法重载 编辑:程序博客网 时间:2024/05/22 13:21
上一篇文章介绍了如何基于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二次封装库源码
- Glide二次封装库的使用
- 基于Glide的二次封装
- Glide库的封装使用
- 二次封装的GCD使用
- Glide V4的封装使用
- AFNetWorking使用及二次封装的好处
- ORMLite 数据库的使用--二次封装
- OkHttp的基本使用以及二次封装
- okhttp的二次封装(基本使用)
- Glide的封装和使用总结
- AFNetWorking的二次封装
- Volley的二次封装
- glog的二次封装
- ViewHolder的二次封装
- OkHttp的二次封装
- AFNetWorking的二次封装
- Volley的二次封装
- okhttp的二次封装
- html5移动端Meta设置
- SQL学习(一)--数据库 行列转换
- WPF 杂谈——资源文件
- 用DirectX实现多视图渲染
- ArcEngine中实现axMapControl控件鼠标左击右击响应不同事件
- Glide二次封装库的使用
- Android源码分析之Handler消息机制
- 百度地图的基本应用和遇到的坑
- 理解EM算法
- 事物
- vue-cli webpack中引入jquery
- 自定义CrashHandler 处理Uncaught异常
- Hibernate之主键生成策略
- Annotation processing is not supported for module cycles解决方案