glide

配置

混淆

	-keep public class * implements com.bumptech.glide.module.GlideModule

okhttp

        官方链接

        要注意:一定要忽略OkHttpGlideModule的混淆。

自定义配置与GlideBuilder

        实现GlideModule接口,并在清单文件中如同okhttp配置一般进行配置。如:

        <meta-data android:name="com.xxx.code.GlideModuleConfig"
            android:value="GlideModule" />
        其中name指向的就是自己定义的GlideModule。自定义配置示例如下:
public class GlideModuleConfig implements GlideModule {
    //创建Glide实例前,对Glide实例进行设置。仅会被调用一次
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDecodeFormat(DecodeFormat.DEFAULT);//定义图片格式
        //设置sd卡缓存位置——External默认存储在context.getExternalCacheDir()目录中
        //也可以在ExternalCacheDiskCacheFactory中指定存储路径——放在context.getExternalCacheDir()哪个目录下,
        //同时也可指定sd卡缓存大小。或者直接继承实现DiskLruCacheFactory,定义自己的glide缓存目录路径。
        builder.setDiskCache(new ExternalCacheDiskCacheFactory(context));
        int size = (int) (Runtime.getRuntime().maxMemory() / 8);
        //设置图片池大小——用于bitmap的重复使用
        builder.setBitmapPool(new LruBitmapPool(size));
        //设置缓存内存
        builder.setMemoryCache(new LruResourceCache(size));
    }

    //向Glide实例中注册组件。在Glide实例创建完成,但没有发起任何请求之前调用
    @Override
    public void registerComponents(Context context, Glide glide) {
        //        glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory()); 此为Okhttp进行的操作
    }
}

常用方法

        get():Glide的静态方法,用于获取Glide的单例。

        getBitmapPool():获取bitmapPool实例。

        clearXXXX():清除内存/硬盘缓存。

        with():将Glide实例绑定到某一个Activity/Context/Fragment/FragmentActivity的生命周期中。获取Glide的实例的静态方法。

        load():加载路径指定的图片。可以加载的格式有;url、文件、本地资源图片(R.mipmap.xxxx)、Uri等。

        animate():设置图片显示时的动画。可以是补间动画——Animation对象或R.anim.xxxx都可,也可以是ViewPropertyAnimation.Animator。如下:

        Animation anim = new AlphaAnimation(0,1);
        ScaleAnimation a2 = new ScaleAnimation(0.1f,1,0.1f,1f);
        AnimationSet set = new AnimationSet(true);
        set.addAnimation(anim);
        set.addAnimation(a2);
        set.setDuration(5000);
        set.setFillAfter(true);

        File file = new File(Environment.getExternalStorageDirectory(), "xxx.jpg");
//        Glide.with(this).load(R.mipmap.draw).asBitmap().into(iv); //加载资源文件
//        Glide.with(this).load(Uri.fromFile(file)).animate(R.anim.test).into(iv);  //加载Uri
//        Glide.with(this).load(url).animate(anim).into(iv);  // 加载String类型的Url
        ViewPropertyAnimation.Animator alpha = new ViewPropertyAnimation.Animator() {
            @Override
            public void animate(View view) {  // 在该方法中为view执行相应的动画
                ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0, 1);
                scaleX.setDuration(5000);
                scaleX.start();
            }
        };
        Glide.with(getApplicationContext()).load(Uri.fromFile(file)).animate(alpha).into(iv);

        asBitmap(),asGif():将资源加载成bitmap或者gif。

        skipMemoryCache():跳过内存缓存。

        diskCacheStrategy():硬盘缓存策略。NONE——不进行缓存;ALL——都进行缓存;SOURCE——缓存源资源;RESULT——缓存对源资源进行转换后的资源(bitmapTransform()之后的资源),但不缓存源资源。

        placeholder(),error():占位图。

        into():加载资源后的处理方式。传入ImageView会将加载的图片显示在ImageView上;传入两int会将加载的图片成指定的大小,再通过get()方法可以获取一个Bitmap对象,因为get方法是阻塞式的,所以必须在子线程中操作。传入Target对象时,可以监听图片加载过程中的各个状态:开始加载、加载失败、加载成功等。如:

        Glide.with(this).load(url).asBitmap().placeholder(R.mipmap.draw).error(R.mipmap.error).into(new SimpleTarget<Bitmap>() {
            @Override
            public void onLoadStarted(Drawable placeholder) {
                Log.e(TAG,"onLoadStarted");
                iv.setImageDrawable(placeholder);  //开始加载时设置成占位符,对应的是placeholder
            }

            @Override
            public void onLoadFailed(Exception e, Drawable errorDrawable) {
                Log.e(TAG,"onLoadFailed");
                iv.setImageDrawable(errorDrawable);  // 加载失败时,对应的是error()
            }

            @Override
            public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                Log.e(TAG,"onResourceReady");
                iv.setImageBitmap(resource);  // 图片加载成功
            }
        });
        bitmapTransform():将Glide得到的Bitmap进行转换操作,比如转换成圆角的、进行模糊等。多种效果可参考开源转换项目。注意:占位图和错误图是不会通过该方法进行转换的。如:
        Glide.with(this).load(url).bitmapTransform(new Transformation<Bitmap>() {
            @Override
            public Resource<Bitmap> transform(Resource<Bitmap> resource, int outWidth, int outHeight) {
                Bitmap src = resource.get();  // 加载的原图片,一般来说是对该bitmap对象进行操作
                int width = src.getWidth();
                int height = src.getHeight();

                // 可以看出bitmapPool的作用——对转换src时需要用到的bitmap进行缓存,防止重复创建导致OOM.
                // 比如常用的LruBitmapPool就是按Lru策略对Bitmap进行缓存
                BitmapPool pool = Glide.get(MainActivity.this).getBitmapPool();
                Bitmap b = pool.get(width, height, Bitmap.Config.ARGB_8888);
                if (b == null) {
                    b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                    pool.put(b);
                }
                Canvas canvas = new Canvas(b);
                Path path = new Path();
                path.addCircle(b.getWidth() / 2, b.getHeight() / 2, 100, Path.Direction.CW);
                canvas.clipPath(path);
                canvas.drawBitmap(src, 0, 0, null);
                return BitmapResource.obtain(b, pool);
            }

            @Override
            public String getId() {  // 这个方法不能返回null
                return url;
            }
        }).into(iv);

BitmapPool与MemoryCache

        Glide加载完毕指定的资源图片src后,可以通过bitmapTransform()对图片进行转换——如圆角模糊等。在转换的过程中,可能需要别的Bitmap对象进行辅助,而BitmapPool就是对这些辅助的Bitmap进行缓存管理MemoryCache是对src进行内存缓存管理的。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值