一 Picasso框架

待续

 

 



二 Glide框架



1.GlideModule配置参数


package com.cary.okhttp;

import android.content.Context;

import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
import com.bumptech.glide.load.engine.cache.LruResourceCache;
import com.bumptech.glide.load.engine.cache.MemorySizeCalculator;
import com.bumptech.glide.module.GlideModule;

/**
 * Glide参数配置
 */

public class GlideConfig implements GlideModule {

    private final int diskSize = 1024 * 1024 * 100;
    private final int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8;  // 取1/8最大内存作为最大缓存

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        // 定义缓存大小和位置
        builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskSize));  //内存中

        // 默认内存和图片池大小
        MemorySizeCalculator calculator = new MemorySizeCalculator(context);
        int defaultMemoryCacheSize = calculator.getMemoryCacheSize(); // 默认内存大小
        int defaultBitmapPoolSize = calculator.getBitmapPoolSize(); // 默认图片池大小
        builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize)); // defaultMemoryCacheSizes默认的
        builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize));

        // 自定义内存和图片池大小
        builder.setMemoryCache(new LruResourceCache(memorySize));
        builder.setBitmapPool(new LruBitmapPool(memorySize));

        // 定义图片格式
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
        builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565); // 默认
    }

    @Override
    public void registerComponents(Context context, Glide glide) {

    }
}

配置androidManifestxml


<meta-data
    android:name="com.cary.okhttp.GlideConfig"
    android:value="GlideModule"/>


配置proguard-rules.pro


-keepnames class * com.example.jianglei.glidedemo.GlideModelConfig


Glide允许一个应用当中存在多个GlideModules,但是Glide并不会按照一个特殊的顺序去调用已注册的GlideModules,如果一个应用的多个依赖工程当中有多个相同的Modules,就有可能会产生冲突。 
如果一个冲突是不可避免的,应用应该默认去定义一个自己的Module,用来手动地处理这个冲突,在进行Manifest合并的时候,可以用下面的标签排除冲突的Module:



<meta-data android:name=”xxxxx.GlideConfig” tools:node=”remove”/>


2.GlideUtils



package com.cary.okhttp;

import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;

/**
 * Created by xi on 2017/4/9.
 */

public class GlideUtil {

    /**
     * 异步网络图片加载
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadNetImg(Context context, String url,ImageView imageView){
        //http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg
        Glide.with(context)
                .load(url)
                .into(imageView);
    }

    /**
     *  异步网络图片加载并设置图片显示大小
     * @param context
     * @param url
     * @param imageView
     * @param width
     * @param height
     */
    public static void loadImgWithSize(Context context, String url,ImageView imageView, int width, int height){
        Glide.with(context).load(url).override(width, height).into(imageView);
    }


    /**
     * 异步网络加载图片,失败加载默认图片
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadImgWithError(Context context, String url,ImageView imageView){
        Glide.with(context)
                .load(url)
                .placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);
    }

    /**
     * 网络图片加载动画
     * @param context
     * @param url
     * @param imageView
     * @param animId
     */
    public static void loadImgWithAnimate(Context context, String url,ImageView imageView, int animId){
        Glide.with(context).load(url).animate(animId).into(imageView);
    }

    /**
     * 图片加载完成后回掉
     */

    /**
     * 支持缩略图,先加载缩略图 然后在加载全图
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadGifWihtThumbnail(Context context, String url,ImageView imageView){
        Glide.with(context).load(url).thumbnail(0.1f).into(imageView); //传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。
    }

    /**
     * 显示gif静态图
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadAsBitmap(Context context, String url,ImageView imageView) {
        Glide.with(context).load(url).asBitmap().into(imageView);
    }

    /**
     * 显示gif动态图
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadAsGif(Context context, String url,ImageView imageView) {
        Glide.with(context).load(url).asGif().into(imageView);
    }

    /**
     * 设置磁盘缓存
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadWithDiskCache(Context context, String url,ImageView imageView){
        //缓存参数
        //ALL:缓存源资源和转换后的资源(即所有版本,默认行为)
        //NONE:不作任何磁盘缓存。然而,默认的它将仍然使用内存缓存!
        //SOURCE:仅缓存源资源(原来的全分辨率的图像)。
        //在我们上面略缩图的例子中,将会只有一个1000x1000 像素的图片
        //RESULT:缓存转换后的资源(最终的图像,即降低分辨率后的(或者是转换后的)
        Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
    }

    /**
     *  跳过内存缓存
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadWithSkipMemoryCache(Context context, String url,ImageView imageView){
        //设置跳过内存缓存
        //这意味着 Glide 将不会把这张图片放到内存缓存中去
        //这里需要明白的是,这只是会影响内存缓存!Glide 将会仍然利用磁盘缓存来避免重复的网络请求。
        Glide.with(context)
                .load(url)
                .skipMemoryCache(true)
                .into(imageView);
    }

    /**
     * 设置加载优先级
     * @param context
     * @param url
     * @param imageView
     */
    public static void loadByPriority(Context context, String url,ImageView imageView){
        Glide.with(context).load(url).priority(Priority.NORMAL).into(imageView);
    }

    /**
     * 清理内存缓存 可以在UI主线程中进行
     * @param context
     */
    public static void clearMemoryCache(Context context){
        Glide.get(context).clearMemory();
    }


    /*
    *  绑定生命周期:如果绑定对象生命周期结束,那么等待中的加载请求会被取消
    * .with(Context context)// 绑定Context
      .with(Activity activity);// 绑定Activity
      .with(FragmentActivity activity);// 绑定FragmentActivity
      .with(Fragment fragment);// 绑定Fragment
    */

}






三 Fresco框架

待续