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);
                                }
    
                            }
                        }
                    });
  • 相关阅读:
    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
    HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    【转】LaTeX 符号命令大全
    HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
    数据结构之稀疏矩阵
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/chhom/p/6069320.html
Copyright © 2011-2022 走看看