淘先锋技术网

首页 1 2 3 4 5 6 7

Glide图片加载框架

详细了解:https://muyangmin.github.io/glide-docs-cn/
Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode
pipeline),以及自动的资源池技术

Glide使用

implementation 'com.github.bumptech.glide:glide:4.9.0’

Glide.with(context) .load(myUrl) .into(imageView);

取消加载同样很简单: Glide.with(fragment).clear(imageView);

占位符(Placeholder)

占位符是当请求正在执行时被展示的 Drawable 。当请求成功完成时,占位符会被请求到的资源替换。如果被请求的资源是从内存中加载出来的,那么占位符可能根本不会被显示。如果请求失败并且没有设置 error Drawable ,则占位符将被持续展示。类似地,如果请求的url/model为 null ,并且 error Drawable 和 fallback 都没有设置,那么占位符也会继续显示。

错误符(Error)

error Drawable 在请求永久性失败时展示。error Drawable 同样也在请求的url/model为 null ,且并没有设置 fallback Drawable 时展示。

缩略图 (Thumbnail) 请求

Glide 的 thumbnail() API 允许你指定一个 RequestBuilder 以与你的主请求并行启动。thumbnail()
会在主请求加载过程中展示。如果主请求在缩略图请求之前完成,则缩略图请求中的图像将不会被展示。thumbnail() API
允许你简单快速地加载图像的低分辨率版本,并且同时加载图像的无损版本,这可以减少用户盯着加载指示器 【例如进度条–译者注】 的时间。
thumbnail() API 对本地和远程图片都适用,尤其是当低分辨率缩略图存在于 Glide 的磁盘缓存时,它们将很快被加载出来。
thumbnail() API 使用起来相对简单: Glide.with(fragment) .load(url)
.thumbnail(Glide.with(fragment) .load(thumbnailUrl)) .into(imageView);

Glide设置图片大小

.override(width,height) //图片显示的分辨率 ,像素值 可以转化为DP再设置

Glide裁剪

CenterCrop

CenterCrop()是一种“去除多余”的裁剪方式,它会把ImageView边界以外的部分裁剪掉。这样一来ImageView会被填充满,但是这张图片可能不会完整地显示出来(ps:因为超出部分都被裁剪掉了)。

Glide .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .override(600, 200) // resizes the image to these dimensions (in pixel) .centerCrop() // this cropping technique scales the image so that it fills the requested bounds and then crops the extra. .into(imageViewResizeCenterCrop);

FitCenter

FitCenter()
是一种“中心匹配”的方式裁剪方式,它裁剪出来的图片长宽都会小于等于ImageView的大小,这样一来。图片会完整地显示出来,但是ImageView可能并没有被填充满。

Glide .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .override(600, 200) .fitCenter() .into(imageViewResizeFitCenter);
public class ViewUtils {
 
    /**
     * 添加imageview
     * @param context 上下文
     * @param string 图片地址
     * @return ImageView
     */
    public static ImageView addImageView(Context context,String string){
        final ImageView iv = new ImageView(context);
        iv.setScaleType(ImageView.ScaleType.CENTER_CROP); //设置ImageView的填充方式
        if(Util.isOnMainThread()) //判断是否在主线程处理
            Glide.with(context).load(string).asBitmap().override(750,280).into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    if(resource!=null){
                        Bitmap bitmap = BitmapCut.cutBitmap(resource); //调用裁剪图片工具类进行裁剪
                        if(bitmap!=null)
                            iv.setImageBitmap(bitmap); //设置Bitmap到图片上
                    }
                }
            }); //方法中设置asBitmap可以设置回调类型
        return iv;
    }
 
}

Glide缓存
在这里插入图片描述
磁盘缓存策略(Disk Cache Strategy)

DiskCacheStrategy 可被 diskCacheStrategy 方法应用到每一个单独的请求。
目前支持的策略允许你阻止加载过程使用或写入磁盘缓存,选择性地仅缓存无修改的原生数据,或仅缓存变换过的缩略图,或是兼而有之。 默认的策略叫做
AUTOMATIC ,它会尝试对本地和远程图片使用最佳的策略。当你加载远程数据(比如,从URL下载)时,AUTOMATIC
策略仅会存储未被你的加载过程修改过(比如,变换,裁剪–译者注)的原始数据,因为下载远程数据相比调整磁盘上已经存在的数据要昂贵得多。对于本地数据,AUTOMATIC策略则会仅存储变换过的缩略图,因为即使你需要再次生成另一个尺寸或类型的图片,取回原始数据也很容易。

指定 DiskCacheStrategy 非常容易:

GlideApp.with(fragment) .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(imageView);

Glide Gif和视频

Glide.with(this).load("图片地址:url").asGif().into(iv);

String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; Glide .with( context ) .load( Uri.fromFile( new File( filePath ) ) ) .into( imageViewGifAsBitmap );

Glide优先级详细了解https://www.jianshu.com/p/a4053bf71fee
GlideBitmap四大色彩模式详细了解https://blog.csdn.net/awenyini/article/details/79743798