glide+kotlin 加载图片最舒适的几个扩展方法

glide+kotlin 加载图片最舒适的几个扩展方法

  • 前言
  • 加载网络图片
    • thumbnail()
  • 加载视频关键帧
  • GlideExt.kt

前言

关键词:glide加载网络图片,glide加载视频关键帧

做安卓的对kotlin和glide应该都不陌生,在这里就不多说了,但是很多原生开发(包括以前的我)对于kotlin扩展方法这一块都没有想到去利用,本篇文章主要是记录自己用的很舒服的几个结合kotlin特性和glide加载网络图片的imageview的扩展方法;也是抛砖引玉让大家方便自己不要老是惦记自己那些个工具类了,大家可以根据自己的需求更改。

加载网络图片

fun ImageView.loadPicThumbnail(url :String){
    Glide.with(context)
        .load(url)
        .error(R.mipmap.pic_err)
        .placeholder(R.mipmap.pic_place)
        .thumbnail( 0.1f )
        .into(this)
}

一些参数的复习和解释

  • .load(url)
    方法: 加载指定路径的网络图片
    参数:图片网络链接
  • error(R.mipmap.pic_err)
    方法:加载指定路径的错误占位图,表示网络图片加载失败
    参数:mipmap或者drawable图片文件
  • .placeholder(R.mipmap.pic_place)
    方法:加载指定路径的占位图,表示网络图片正在加载
    参数:mipmap或者drawable图片文件
  • .into(this)
    方法:将图片加载到控件
    参数:这里统一是imageview

thumbnail()

glide.thumbnail() 这个 方法叫缩略图,是一个加载大图时需要的参数,为什么这么说呢?

比如上文的.thumbnail( 0.1f )中的参数0.1f,Glide 将会显示原始图像的10%的大小。如果原始图像有 1000x1000 像素,那么缩略图将会有 100x100 像素。那么实际情况中缩略图会比真正的原始图像加载的更快,所以上例中的代码加载一个比较大的图片时,它的图片加载顺序应该是:

                                              占位图  -> 缩略图 -> 原始图像

这是例子,下面有两张加载出来的原始图像,两张缩略图,这对用户体验上来说是一种改观,起码让用户知道图片一直在努力加载

glide+kotlin 加载图片最舒适的几个扩展方法_第1张图片

但是如果原始图像本来就比较小,那么对于用户来说就没有差别,对于资源来说也是一个浪费,所以这个参数一般是在列表中展示图片的时候使用

加载视频关键帧

我们也先上方法

fun ImageView.frame0Thumbnail(url :String){
    Glide.with(context)
        .setDefaultRequestOptions(
            RequestOptions()
                .frame(0)
                .centerCrop())
        .load(url)
        .error(R.mipmap.pic_err)
        .placeholder(R.mipmap.pic_place)
        .thumbnail( 0.1f )
        .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
        .into(this)
}

一些参数的复习和解释

  • setDefaultRequestOptions
    方法:设置默认的请求配置,在上例代码中我们截取了视频的第0帧的图片,并裁剪了圆角
  • diskCacheStrategy
    方法,加载策略,默认就是AUTOMATIC,自动选择,如果应用程序以不同的大小多次使用相同的资源,并且愿意牺牲一些速度和磁盘空间以换取更低的带宽使用,则可以考虑使用 DiskCacheStrategy.DATA 或者DiskCacheStrategy.ALL.

GlideExt.kt

import android.widget.ImageView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
import com.fawvw.hmi.dvr.R



fun ImageView.frame0(url :String){
    Glide.with(context)
        .setDefaultRequestOptions(
            RequestOptions()
            .frame(0)
            .centerCrop())
        .load(url)
        .error(R.mipmap.pic_err)
        .placeholder(R.mipmap.pic_place)
        .into(this)
}

fun ImageView.frame0Thumbnail(url :String){
    Glide.with(context)
        .setDefaultRequestOptions(
            RequestOptions()
                .frame(60)
                .centerCrop())
        .load(url)
        .error(R.mipmap.pic_err)
        .placeholder(R.mipmap.pic_place)
        .thumbnail( 0.1f )
        .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
        .into(this)
}



fun ImageView.loadPic(url :String){
    Glide.with(context)
        .load(url)
        .error(R.mipmap.pic_err)
        .placeholder(R.mipmap.pic_place)
        .into(this)
}

fun ImageView.loadPicThumbnail(url :String){
    Glide.with(context)
        .load(url)
        .error(R.mipmap.pic_err)
        .placeholder(R.mipmap.pic_place)
        .thumbnail( 0.1f )
        .into(this)
}

总得来说还是挺基础的,主要是一个复习和记录,其实glide还有一些进阶用法,比如自己监听加载状态或者改变加载图片的色值以加快加载速度等,主要还是看大家各自的需求,直接load又不是不能用

你可能感兴趣的:(Android日常,glide,kotlin)