Glide源码分析(一)---基本

吐槽

中秋节啊,自己身为一个单身程序猿又不回家,还是在实验室学个新的框架吧,毕竟这个框架很实用,之前自己都还没用过,就很尴尬。
那中秋快乐啊

本文思维导图

在这里插入图片描述
这一篇主要就是讲基本用法的,因为自己之前也没用过,所以从最基础的来讲
我看的是郭神的博客开始的学习
https://blog.youkuaiyun.com/guolin_blog/article/details/53759439

Glide是什么

答曰:一种安卓平台上的图形加载框架,一种很好很好用的框架

然后网上说了下picasso这个框架和Glide的对比,这个框架也是安卓上的加载图片的一个框架,两者有相同的地方和不同的地方

Picasso的作用:

  • 在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题
  • 使用复杂的图片压缩转换来尽可能的减少内存消耗
  • 自带内存和硬盘二级缓存功能

Glide的作用:

  • GIF动画的解码
  • 本地视频剧照的解码
  • 缩略图的支持
  • Activity生命周期的集成
  • 转码的支持
  • 动画的支持
  • OkHttp和Volley的支持
  • 其他功能:如在图片加载过程中,使用Drawables对象作为占位符、图片请求的优化、图片的宽度和高度可重新设定、缩略图和原图的缓存等功能

然后我们对比起来发现这两者的区别:

  • Picasso所能实现的功能,Glide都能做,只是所需的设置不同
  • Picasso体积比起Glide小太多
  • Glide的好处是大型的图片流

用法

首先我们先肯定配置下这块
配置很简单,只要在Module的Gradle添加依赖即可
我看了下郭神博客里面说的Glide最新的稳定版本是3.7.0,所以用这个吧

第一步:我们添加一个依赖和一个权限
在app/build.gradle文件中添加依赖

compile 'com.github.bumptech.glide:glide:3.7.0'

然后再申请网络请求权限//因为要从网上获取图片

<uses-permission android:name="android.permission.INTERNET" />

第二步:加载图片
先看下最简单的用法,从网络上获取一张图片,放进一个imageView里面
先看下布局 很简单的

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_load"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取图片"
        />
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

然后网上找个我老婆D.va的图片的URL http://att.bbs.duowan.com/forum/201611/07/1854591iuaxsub3bldtutq.png

再看下逻辑代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mbutton;
    private ImageView show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mbutton = (Button)findViewById(R.id.btn_load);
        show = (ImageView)findViewById(R.id.image_view);
        mbutton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_load:
                String url = "http://att.bbs.duowan.com/forum/201611/07/1854591iuaxsub3bldtutq.png";
                Glide.with(this)
                        .load(url)
                       // .placeholder(R.drawable.noimage)
                       // .error(R.drawable.erronimage)
                        //.diskCacheStrategy(DiskCacheStrategy.NONE)
                        .into(show);
                break;

        }

    }
}

真的是超级超级简单的框架,很轻松就把网络图片就加载进去了

在这里插入图片描述

然后我们就发现这块就简单的一段代码就好了,真的是舒服啊

Glide.with(this).load(url).into(imageView);
  • with()这个方法是创建一个加载图片的实例的,可以接收很多的参数,不论是在一个Activity还是在Fragment里面,都可以的
  • load()指定加载的图片资源,各种方式的
  • into()这块是最好理解的,因为它就指定了要放在那个ImageView里面,也还支持很多用法
    //这块就是简单分析下,,,肯定要好好看这几块函数的

占位图和加载失败的图片

然后我们发现这块还是不满足我们的需求啊,因为我们还需要两种情况下的图片:

  • 加载时间太长怎么办,不能让别人看到空白唉,很尴尬的
  • 加载失败了怎么办,,,也不可能留一大堆空白唉

但是这个框架贴心的给我们弄好了这块,自己只需要准备图片就好了

首先先看下占位图

占位图就是指在图片的加载过程中,我们先显示一张临时的图片,等图片加载出来了再替换成要加载的图片。
就这种,好不容易找的图哈哈哈

在这里插入图片描述

就是我们在加载图片时候,还没加载之前先让这货呆在图片里面,然后等我们图片加载出来之后,就可以把这个替换掉
代码也很简单:

Glide.with(this)
        .load(url)
        .placeholder(R.drawable.noimage)//加入占位图片
       // .error(R.drawable.erronimage)
        .diskCacheStrategy(DiskCacheStrategy.NONE)//关闭缓存
        .into(show);

看下效果:
在这里插入图片描述

然后我们再看下加载失败的情况下的处理:

异常占位图:
如果因为某些异常情况导致图片加载失败,比如说手机网络信号不好,这个时候就显示这张异常占位图
我也网上找了一个这个图片
在这里插入图片描述

用法也是一样的,先弄个图片,然后再加个函数

Glide.with(this)
        .load(url)
        .placeholder(R.drawable.noimage)
        .error(R.drawable.erronimage)//异常处理的图片方法
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .into(show);

效果如下:
在这里插入图片描述

加载资源类型

因为它可以加载很多东西

先看下图片的加载:
1 加载网络资源
简单的ULR就好了

Glide.with(context).load(internetUrl).into(ImageView);

2 从文件中加载图片

File file = new File(Environment.getExternalStoragePublicDirectory
(Environment.DIRECTORY_PICTURES),"Test.jpg");
Glide.with(context).load(file).into(imageViewFile);

3 从资源id加载图片

int resourceId = R.mipmap.ic_launcher;
Glide.with(context).load(resourceId).into(imageViewResource);

4 加载Gif图片
这个和网络上的图片加载是一样的

String gifUrl = "xxxxx";
Glide.with( context ).load( gifUrl ).into( imageViewGif );

//然后还有好多的方式。以后遇到再说

##指定图片的格式和大小

这块也很神奇,因为Glide会自动判断图片的格式的
就是不论是图片还是GlF图片的,它都会自己判断的

然后图片大小这块,我们也发现这块人家框架都考虑好了,图片默认都是判断lmageView的大小的,然后把图片扔进去就好了
如果真的要自己去指定一个图片的固定大小也可以的

Glide.with(this)
        .load(url)
        .placeholder(R.drawable.noimage)
        .error(R.drawable.erronimage)
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .override(100,100)//设置图片大小的
        .into(show);

总结

简单的基本用法都看了下,这个框架真的很简单的使用,所以继续努力看这个框架的源码吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值