• Glide 图片框架


    学习参考:https://blog.csdn.net/guolin_blog/article/details/53759439

    一 基础使用

    Picasso比Glide更加简洁和轻量,Glide比Picasso功能更为丰富。
    没有最好的框架,只有最适合自己的框架。选择了Glide来进行学习,并且这也是Google官方推荐的图片加载框架。

     1        Glide.with(mContext).load(localImagePath)
     2                 .crossFade()//淡入淡出动画
     3                 //设置缩略图 显示原图的10%
     4                 //当全分辨率的目标图片在后台加载完全后,Glide会自动切换显示全像素的图片。
     5                 //设置缩略图 也可以是其他图片
     6                 .thumbnail(0.1f)
     7                 .centerCrop()//缩放 填充iamgeview宽高,图片可能不完全显示
     8                 .placeholder(R.drawable.ic_picture_loading)//占位图
     9                 .error(R.drawable.mis_default_error)//error图
    10                 //内存缓存策略 true跳过内存缓存; false默认不跳过内存缓存:注意,跳过内存缓存,还是会缓存到硬盘
    11                 .skipMemoryCache(false) 
    12                 .diskCacheStrategy(DiskCacheStrategy.NONE)//磁盘缓存策略 不缓存到SD卡
    13                 .dontAnimate()//取消淡入淡出动画
    14                 .listener(reqlistener)
    15                 .into(item_iv);

    二 Glide的特性:

    1 异步加载:基础功能
    2 支持loading动画,占位图,加载出差图片
    3 支持缓存:内存缓存策略skipMemoryCache、磁盘缓存策略diskCacheStrategy
        这个diskCacheStrategy()方法基本上就是Glide硬盘缓存功能的一切,它可以接收四种参数:
        DiskCacheStrategy.NONE: 表示不缓存任何内容。
        DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
        DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。 
        DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
        上面四种参数的解释本身并没有什么难理解的地方,但是有一个概念大家需要了解,就是当我们使用Glide去加载一张图片的时候,Glide默认并不会将原始图片展示出来,而是会对图片进行压缩和转换,经过种种一系列操作之后得到的图片,就叫转换过后的图片。
        而Glide默认情况下在硬盘缓存的就是转换过后的图片,我们通过调用diskCacheStrategy()方法则可以改变这一默认行为。
    4 支持设置加载图片尺寸override(200,200),glide只会将图片加载成200*200分辨率的尺寸,不管imageview的大小。
       大部分情况下不需要设置,因为Glide会自动判断ImageView的大小,然后只将这么大的图片像素加载到内存当中,帮助我们节省内存开支。
    5 生命周期:与传入的context对象共生命周期,如果是activity或者fragment,当销毁时,自动取消下载(加载图片)
    6 图片变换(等比例缩放)
      fitCenter:会缩放图片让两边都相等或小于ImageView的所需求的边框。图片会被完整显示,可能不能完全填充整个ImageView。
      centerCrop:会缩放图片让图片充满整个ImageView的边框,然后裁掉超出的部分。ImageVIew会被完全填充满,但是图片可能不能完全显示出。
    7 圆角图片
       Glide只支持以上两种缩放,两种缩放方法其实都是调用了transform()方法,可以自定义BitmapTransformation,实现
     1 public class CornersTransform extends BitmapTransformation {
     2 
     3     private float radius;
     4 
     5     public CornersTransform(Context context) {
     6         super(context);
     7         radius = 10;
     8     }
     9 
    10     public CornersTransform(Context context, float radius) {
    11         super(context);
    12         this.radius = radius;
    13     }
    14 
    15     @Override
    16     protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
    17         return cornersCrop(pool, toTransform);
    18     }
    19 
    20     private Bitmap cornersCrop(BitmapPool pool, Bitmap source) {
    21         if (source == null) return null;
    22 
    23         Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
    24         if (result == null) {
    25             result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
    26         }
    27 
    28         Canvas canvas = new Canvas(result);
    29         Paint paint  = new Paint();
    30         paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
    31         paint.setAntiAlias(true);
    32         RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
    33         canvas.drawRoundRect(rectF, radius, radius, paint);
    34         return result;
    35     }
    36 
    37     @Override
    38     public String getId() {
    39         return getClass().getName();
    40     }
    41 
    42 }
    43 
    44 Glide.with(this).load(list.get(0).getOriginalPath()).transform(new CornersTransform(this)).into(iv);

    三 项目中应用

    头像:fitCenter() ,完全显示图片,可能不填满imageview
    1   Glide.with(this).load(list.get(0).getOriginalPath())
    2                         .fitCenter()
    3                         .placeholder(R.drawable.ic_picture_loading)
    4                         .error(R.drawable.mis_default_error)
    5                         .transform(new CornersTransform(this))//圆角
    6                         .into(iv);
    附件(缩略图):centerCrop() 填充imageview
    1     Glide.with(mContext).load(localImagePath)
    2                 .crossFade()
    3                 .oversize(300,300)4                 .centerCrop()
    5                 .placeholder(R.drawable.ic_picture_loading)
    6                 .error(R.drawable.mis_default_error)
    7                 .skipMemoryCache(false) //内存缓存策略 true关闭内存缓存; false默认不跳过内存缓存
    8                 .into(item_iv);
    浏览大图:imageview宽高设置fill_match,Glide设置fitCenter() ,同头像
     
  • 相关阅读:
    hadoop运维
    HBase Master启动过程
    bulk-load 装载HDFS数据到HBase
    HBase开启LZO
    Hash函数
    swift菜鸟入门视频教程-02-基本运算符
    当当网-前端project师測试题
    VB.NET & DataGridView与数据库的连接
    Hadoop-2.2.0中文文档—— Common
    PHP 获取数组随意下标key的上一个prev和下一个next下标值
  • 原文地址:https://www.cnblogs.com/suiyilaile/p/9141086.html
Copyright © 2020-2023  润新知