一个基于GLide加载图片的封装开源框架。能够监听加载图片时的进度 ,能够设置图片的圆角、边框。可加载成圆形。android
来自孙福生一个开源框架。项目地址为:github.com/sfsheng0322…git
话很少说,上咱们的咱们的效果图:github
加载不一样形式的图片:缓存
public void loadLocalImage(@DrawableRes int resId, int placeholderResId) {
load(resId, requestOptions(placeholderResId));
}
public void loadLocalImage(String localPath, int placeholderResId) {
load(FILE + localPath, requestOptions(placeholderResId));
}
public void loadCircleImage(String url, int placeholderResId) {
load(url, circleRequestOptions(placeholderResId));
}
public void loadLocalCircleImage(int resId, int placeholderResId) {
load(resId, circleRequestOptions(placeholderResId));
}
public void loadLocalCircleImage(String localPath, int placeholderResId) {
load(FILE + localPath, circleRequestOptions(placeholderResId));
}复制代码
效果图:bash
GlideView 对ImageView进一步的封装微信
GlideImageLoader 对Glide.load的进一步封装网络
CircleProgressView和ShapeImageView 封装加载图片的进度条app
CircleProgressView和ShapeImageView是自定义ImageView,其中封装了一些自定义属性
能够在能够在代码中设置图片的一些属性, 固然这些属性也能够在GlideImageView上面设置。框架
eg:
// 设置边框颜色
public void setBorderColor(@ColorRes int id) {
this.borderColor = getResources().getColor(id);
invalidate();
}
// 设置边框宽度
public void setBorderWidth(int borderWidth) {
this.borderWidth = DisplayUtil.dip2px(getContext(), borderWidth);
invalidate();
}
// 设置图片按下颜色透明度
public void setPressedAlpha(float pressAlpha) {
this.pressedAlpha = pressAlpha;
}
// 设置图片按下的颜色
public void setPressedColor(@ColorRes int id) {
this.pressedColor = getResources().getColor(id);
pressedPaint.setColor(pressedColor);
pressedPaint.setAlpha(0);
invalidate();
}复制代码
具体属性以下ide
Attribute 属性 | Description 描述 |
---|---|
siv_border_color | 边框颜色 |
siv_border_width | 边框宽度 |
siv_pressed_color | 触摸图片时的颜色 |
siv_pressed_alpha | 触摸图片时的颜色透明度: 0.0f - 1.0f |
siv_radius | 圆角弧度 |
siv_shape_type | 两种形状类型:默认是0:rectangle、1:circle |
代码:
image41.load(cat_thumbnail, requestOptions).listener(new OnGlideImageViewListener() {
@Override
public void onProgress(int percent, boolean isDone, GlideException exception) {
if (exception != null && !TextUtils.isEmpty(exception.getMessage())) {
Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
}
progressView1.setProgress(percent);
progressView1.setVisibility(isDone ? View.GONE : View.VISIBLE);
}
});复制代码
加载gif:
让咱们想象一个很是简单的请求,从网络中加载图片到 ImageView。
Glide
.with( context )
.load( eatFoodyImages[0] )
.skipMemoryCache( true )
.into( imageViewInternet );复制代码
调用了 .skipMemoryCache(true) 去明确告诉 Glide 跳过内存缓存。这意味着 Glide 将不会把这张图片放到内存缓存中去。这里须要明白的是,这只是会影响内存缓存!Glide 将会仍然利用磁盘缓存来避免重复的网络请求
图片在这段代码片断中将不会被保存在磁盘缓存中。然而,默认的它将仍然使用内存缓存!为了把这里二者都禁用掉,两个方法一块儿调用:
Glide
.with( context )
.load( eatFoodyImages[0] )
.diskCacheStrategy( DiskCacheStrategy.NONE )
.skipMemoryCache( true )
.into( imageViewInternet );复制代码
Picasso 仅仅缓存了全尺寸的图像。然而 Glide 缓存了原始图像,全分辨率图像和另外小版本的图像。好比,若是你请求的一个图像是 1000x1000 像素的,但你的 ImageView 是 500x500 像素的,Glide 将会把这两个尺寸都进行缓存。
如今你将会理解对于 .diskCacheStrategy() 方法来讲不一样的枚举参数的意义:
DiskCacheStrategy.NONE 什么都不缓存,就像刚讨论的那样
DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像。在咱们上面的例子中,将会只有一个 1000x1000 像素的图片
用 DiskCacheStrategy.SOURCE 去告诉 Glide 仅仅保存原始图片:
Glide
.with( context )
.load( eatFoodyImages[2] )
.diskCacheStrategy( DiskCacheStrategy.SOURCE )
.into( imageViewFile ); 复制代码
在项目中提供了GlideImageLoader类加载图片,好比这样加载图片:先加载缩略图再加载高清图片,并监听加载的进度
private void loadImage(String image_url_thumbnail, String image_url) {
RequestOptions requestOptions = glideImageView.requestOptions(R.color.black)
.centerCrop()
.skipMemoryCache(true) // 跳过内存缓存
.diskCacheStrategy(DiskCacheStrategy.NONE); // 不缓存到SDCard中
glideImageView.getImageLoader().setOnGlideImageViewListener(image_url, new OnGlideImageViewListener() {
@Override
public void onProgress(int percent, boolean isDone, GlideException exception) {
progressView.setProgress(percent);
progressView.setVisibility(isDone ? View.GONE : View.VISIBLE);
}
});
glideImageView.getImageLoader().requestBuilder(image_url, requestOptions)
.thumbnail(Glide.with(ImageActivity.this) // 加载缩略图
.load(image_url_thumbnail)
.apply(requestOptions))
.transition(DrawableTransitionOptions.withCrossFade()) // 动画渐变加载
.into(glideImageView);
}复制代码
加载进度时效果以下:
项目Github连接地址
下载慢?CSDN下载连接:
若是你以为此文对您有所帮助,欢迎入群 QQ交流群 :232203809
微信公众号:终端研发部