zoukankan      html  css  js  c++  java
  • Glide图片加载框架学习

    学习资源来自博客园,请点击

    Glide(图片加载框架)

    Glide默认加载图片的清晰度,即bitmap的格式为RGB_565

    添加依赖

    compile 'com.github.bumptech.glide:glide:3.5.2'//由于glide需要依赖V4包
    compile 'com.android.support:support-v4:24.2.1'

    最简单加载并设置在imageView上

    Glide.with(this)
    .load("http://imgstore.cdn.sogou.com/app/a/100540002/527471.jpg")
    .into(((ImageView)findViewById(R.id.image)));

    针对对清晰度有更高的要求的

    可以通过自定义GlideModel

    实现gilde的GlideModule接口

    package com.tc.glideimageloader.glide;
    import android.content.Context;
    import com.bumptech.glide.Glide;
    import com.bumptech.glide.GlideBuilder;
    import com.bumptech.glide.load.DecodeFormat;
    import com.bumptech.glide.module.GlideModule;
        /**
        * Created by 辉神 on 2016/10/5.
        */
        public class GlideConfiguration implements GlideModule {
        @Override
        public void applyOptions(Context context, GlideBuilder builder) {
        // Apply options to the builder here.
        builder.setDecodeFormat(DecodeFormat.***PREFER\_ARGB\_8888***);
        }
        @Override
        public void registerComponents(Context context, Glide glide) {
        // register ModelLoaders here.
        }
    }

    AndroidManifest.xml

    <meta-data 
    android:name="com.tc.glideimageloader.glide.GlideConfiguration"
    android:value="GlideModule"/>

    缓存策略

    glide缓存所有尺寸的图片

    glide图片加载原理:只加载固定尺寸,并在磁盘中缓存好。如:原为200*200,如果imageView为100*100,则加载时,glide会加载100*100的尺寸大小 到磁盘中,下次自动判断内存否已经加载了这个图片

    但是如果,第一个页面的imageview只有100*100,当点击到第二个面的时候imageview是200*200了,第二页面又要重新加载一次

    可以使用下面的方法,缓存全尺寸的图片,又缓存其他尺寸的图片:

    Glide.with(this)
    .load("http://imgstore.cdn.sogou.com/app/a/100540002/527471.jpg")
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(((ImageView)findViewById(R.id.image)));

    DiskCaceStrategy的四个常量解说

    all:缓存源资源和转换后的资源---缓存原尺寸图片和其他小尺寸的图片
    
    none:不作任何磁盘缓存
    
    source:缓存源资源----这个应该意思是只缓存源资源,可能是原尺寸图片
    
    result:缓存转换后的资源-----缓存固定尺寸,也有可能与原尺寸有很大差异

    priority(Priority.NORMAL)下载优先级

    Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

    override(200,200)按尺寸缓存图片

    centerCrop()和fitCenter()选择放置类型,

    centerCrop()centerCrop在ImageView属性就有这个,用途就是,按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
    
    fitCenter()fitCenter在IMageview也有属性,其实也一样用途,把图片按比例扩大/缩小到View的宽度,居中显示

    transform()设置转换器,例:设置图片圆角

    设置需要加载的内容

    项目中有很多需要先下载图片然后再做一些合成的功能,比如项目中出现的图文混排,该如何实现目标下

    Glide.with(this).load(imageUrl).centerCrop().into(
    
    new SimpleTarget<GlideDrawable>() {
    
    @Override
    
    public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
    
    imageView.setImageDrawable(resource);
    
    }
    
    }
    
    );

    设置占位图和加载出错图

    Glide.with(this)
    .load("http://imgstore.cdn.sogou.com/app/a/100540002/52741171.jpg")
    .placeholder(R.mipmap.placeholder)
    .error(R.mipmap.error)
    .into(((ImageView)findViewById(R.id.image)));

    加载GIF

    无需设置什么鬼,自动加载,picasso框架就不能加载gif图片

    1、只加载静态图

    Glide.with(this).load(imageUrl).asBitmap().into(imageView);//显示gif静态图片

    2、只加载动态图

    Glide.with(this).load(imageUrl).asGif().into(imageView);//显示gif动态图片

    加载缩略图

    Glide.with(this)
    .load("http://imgstore.cdn.sogou.com/app/a/100540002/527471.jpg")
    .placeholder(R.mipmap.placeholder)
    .error(R.mipmap.error)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .thumbnail(0.1f)//这样,gilde会加载缩略图,再加载全图
    .into(((ImageView)findViewById(R.id.image)));

    清理磁盘缓存

    Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行
    
    Glide.get(this).clearMemory();//清理内存缓存 可以在UI主线程中进行
    关注我
  • 相关阅读:
    WorkFlow
    自己写的一个多线程的consumer 和 producter 模式
    Visual Studio进行Web性能测试
    基元线程同步——内核模式构造
    系统架构师
    《构建高性能的web站点》读书笔记缓存
    python中的代码对象
    python web框架互相融合, Pyramid或取代Django
    海量数据处理专题
    Django框架学习Forms篇
  • 原文地址:https://www.cnblogs.com/zengmianhui/p/12634080.html
Copyright © 2011-2022 走看看