zoukankan      html  css  js  c++  java
  • Android 图片框架

    1、图片框架:Picasso、Glide、Fresco

    2.介绍:

    picasso:和Square的网络库能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现

    Glide:模仿了Picasso的API,而且在他的基础上加了很多的扩展(比如git等支持)

    Picasso能实现的功能,Glide都能实现,但Picasso体积比Glide小很多,如果项目中网络请求本身用的就是okhttp或者retrofit(本质还是okhttp),那么建议用Picasso,Glide的好处是大型的图片流,比如git、video等

    Glide详解:

    创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。

    Glide特点:

    • 使用简单
    • 可配置度高,自适应程度高
    • 支持常见图片格式jpg、png、gif、webp
    • 支持多种资源 玩过、本地、资源、Assets等
    • 高效缓存策略 支持Memory和Disk图片缓存,默认Bitmap格式采用RGB_565内存使用至少减少一半
    • 生命周期集成 根据Activity/Fragment生命周期自动管理请求
    • 高效处理Bitmap 使用Bitmap Pool使Bitmap复用,制动调用recycle回收需要回收的Bitmap,减小系统回收压力

    Glide使用:

    1、添加引用build.gradle中添加配置

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

    2、设置绑定生命周期

    Glide.with(Context context); //绑定Context
    
    Glide.with(Activity activity);//绑定Activity
    
    Glide.with(FragmentActivity activity);//绑定FragmentActivity
    
    Glide.with(Fragment fragment);//绑定Fragment

    3、简单的加载图片实例

    Glide.with(this).load(imgUrl).into(imageView);

    4、设置加载中及加载失败图片

    api里面对placeholder(),error()函数中有多态实现

    Glide.with(this).load(imageUrl)
    .placeholder(R.mipmap.ic_launcher)
    .error(R.mipmap.ic_launcher)
    .into(imageView);

    5、设置跳过内存缓存

    Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

    6、设置下载优先级

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

    7、设置缓存策略

    Glide.with(this).load(imageUrl)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(imageView);

    策略解说:

    all:缓存元资源和转换后的资源

    none:不作任何磁盘缓存

    source:缓存源资源

    result:缓存转换后的资源

    8、设置加载动画

    api也提供了几个常用的动画:比如crossFade()

    Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);

    R.anim.item_alpha_in:

    <?xml version="1.0" encoding="utf-8"?>
    
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    
        <alpha
    
            android:duration="500"
    
            android:fromAlpha="0.0"
    
            android:toAlpha="1.0"/>
    
    </set>

    9、设置缩略图

    这样会先加载缩略图,在加载全图

    Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

    10、设置加载尺寸

    Glide.with(this).load(imageUrl).overrde(800,800).into(imageView);

    11设置动态转换

    Glide.with(this).load(imageUrl).centerCrop().into(imageView);

    12、设置动态GIF加载方式

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

    13、缓存的动态清理

     Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行
     Glide.get(this).clearMemory();//清理内存缓存  可以在UI主线程中进行

     14、加载网络图片实现等比例缩放

            Glide.with(mContext)
                    .load(url)
                    .asBitmap()//强制Glide返回一个Bitmap对象
                    .listener(new RequestListener<String, Bitmap>() {
                        @Override
                        public boolean onException(Exception e, String s, Target<Bitmap> target, boolean b) {
                            LogUtil.e(url+"加载失败"+e.toString());
                            Glide.with(mContext)
                                    .load(R.mipmap.pic_default_vertical)
                                    .diskCacheStrategy(cache)
                                    .into(iv);
                            return false;
                        }
    
                        @Override
                        public boolean onResourceReady(Bitmap bitmap, String s, Target<Bitmap> target, boolean b, boolean b1) {
                            return false;
                        }
                    })
                    .into(new SimpleTarget<Bitmap>() {
                        @Override
                        public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
                            int width = bitmap.getWidth();
                            int height = bitmap.getHeight();
                            int S_width =  DisplayUtil.getScreenWidth(mContext);
                            int S_height =  DisplayUtil.getScreenHeight(mContext);
    
                            float scale = ((float) height)/width;
                            iv.setImageBitmap(bitmap);
                            if(width>height){
                                float S_scale = S_height/(S_width*scale);
                                if(isRightToLeft){
                                    iv.setScale(S_scale,S_height*S_scale,0,false);
                                }else{
                                    iv.setScale(S_scale,0,0,false);
                                }
    
                            }
                        }
                    });
  • 相关阅读:
    运算符优先级(图表)
    VNC+SSH相关应用
    VNC常用操作及常见问题解决办法汇总
    操作系统(二): 进程与线程
    Java实现 蓝桥杯 算法提高 01背包
    Java实现 蓝桥杯 算法提高 01背包
    Java实现 蓝桥杯 算法提高 01背包
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 日期计算
  • 原文地址:https://www.cnblogs.com/chhom/p/6069320.html
Copyright © 2011-2022 走看看