Glide、Picasso与与Fresco要点

Glide是一个非常成熟的加载图片的库,她可以从多个源加载图片,如网络、本地、Uri等,更重要的是内部封装了非常好的缓存机制,并且在处理照片的时候能保持一个低的内存消耗,被广泛用在开源项目中。

Glide介绍:专注于处理平滑滑动的图片类库,默认使用HttpUrlConnection下载图片,支持设置渐渐显示的动画,支持设置加载中的图片

Picasso介绍:介绍:Square开源的比较早的图片加载类库,自动处理adapter中的ImageView的回收时取消下载图片,支持加载多种来源的图片,比如网络,sd卡,res资源,支持设置占位图片,支持对图片的自定义处理

Fresco介绍:Facebook开源的专注于优化java堆内存,最大程度减少OOM,在Android4.4以及以下,将图片存储在Android的一块特殊的内存区域,这会让图片处理更加快速,支持Gif和WebP格式的图片

Picasso直接添加依赖,,,Glide要依赖V4包,

Picasso的with只能传入context,Glide的with既可以传context,又可以传Activity或者Fragment,好处是图片加载和Activity或者Fragment保持一致,Activity已经暂停,但是图片确还在加载的情况.

Picasso默认的格式是ARGB_8888,而Glide默认的格式是RGB_565,所以Glide的加载图片的质量不如Picasso

Picasso在图片加载过程中会有一定的延迟,因为它在加载到imageview的时候总是需要调整大小,而Glide的优点就是可以加快图片加载的速度

Glide可以加载GIF图片,而用Picasso加载的GIF图片是不会动的

Glide库文件大小为430KB,方法有2678个

而Picasso的大小大约为118KB,方法有480个

步骤:1添加依赖 2在清单文件中写权限 3设置布局管理器 4设置数据

1添加依赖Glide和V4包(如果没有)

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

2在清单文件中写权限

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

添加RecyclerView

.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

3设置布局管理器

  recyclerview.setLayoutManager(new LinearLayoutManager(this));

4.设置数据

 recyclerview.setAdapter(new MyAdapter());
 //比baseadapter效率高
    class MyAdapter extends RecyclerView.Adapter<MyHolder> {
        @Override
        public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = View.inflate(parent.getContext(), R.layout.adapter_iamge, null);
            return new MyHolder(view);
        }

        @Override
        public void onBindViewHolder(MyHolder holder, int position) {
             //Glid加载图片
            Glide.with(holder.itemView.getContext())
                    .load(Constants.IMAGES[position])
                   .placeholder(R.mipmap.ic_launcher)//默认图片
                    .error(R.mipmap.error)//加载失败图片
                    .centerCrop()//按照图片的原始尺寸比例进行缩放,图片居于视图中间
                    .crossFade(1000)//一秒下载图片
                    .into(holder.ivImage);
         }

        @Override
        public int getItemCount() {
            return Constants.IMAGES.length;
        }

    }
 class MyHolder extends RecyclerView.ViewHolder {
        @InjectView(R.id.iv_image)
        ImageView ivImage;
        public MyHolder(View itemView) {
            super(itemView);
            ButterKnife.inject(this, itemView );
        }
    }

5将图片格式ARGB_565更改为ARGB_8888 实现GlideModule

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }

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

    }

Picasso的使用

1添加依赖

compile 'com.squareup.picasso:picasso:2.5.2'

2使用Picasso加载图片

            Picasso.with(holder.itemView.getContext())
                    .load(Constants.IMAGES[position])
                    .placeholder(R.mipmap.ic_launcher)//默认图片
                    .error(R.mipmap.error)//加载失败图片
                    .centerCrop()//按照图片的原始尺寸比例进行缩放,图片居于视图中间
                    //如果不设置resize(120,120),则Picasso会加载整个图片,显然这样消耗的内存比较大,一般都需要指定一下,而Glide内部已经默认参考了控件的宽高来进行缩放了。
                    .resize(200,180)//必须设置图片大小
                    .into(holder.ivImage);

Fresco的使用

1添加依赖Fresco

 compile 'com.facebook.fresco:fresco:0.11.0'

2将布局中的ImageView替换成SimpleDraweeView

 <com.facebook.drawee.view.SimpleDraweeView
        xmlns:fresco="http://schemas.android.com/apk/res-auto"
        fresco:fadeDuration="1000"
        fresco:actualImageScaleType="centerCrop"
        fresco:placeholderImageScaleType="fitCenter"
        fresco:placeholderImage="@mipmap/ic_launcher"
        fresco:failureImage="@mipmap/error"
        fresco:progressBarImage="@mipmap/progress"
        fresco:progressBarImageScaleType="centerInside"
        fresco:progressBarAutoRotateInterval="1000"
        fresco:roundAsCircle="true"
        android:id="@+id/iv_image"
        android:layout_width="200dp"
        android:layout_height="180dp"
 />

3初始化Fesco, 必须放在 setContentView(R.layout.activity_image_load);上面,不初始化会报错android.view.InflateException: Binary XML file line #7: Error inflating class com.facebook.drawee.view.SimpleDraweeView

  Fresco.initialize(GlideActivity.this);

4 Fresco加载图片

holder.ivImage.setImageURI(Constants.IMAGES[position]);

5Fresco注意事项


fresco:fadeDuration="1000"

fresco:actualImageScaleType="centerCrop"

 fresco:placeholderImage="@mipmap/ic_launcher"

fresco:placeholderImageScaleType="fitCenter"
 
fresco:retryImageScaleType="centerCrop"


resco:progressBarImage="@mipmap/progress"

fresco:progressBarImageScaleType="centerInside"

fresco:progressBarAutoRotateInterval="1000"

 fresco:roundAsCircle="true"
 fresco:roundedCornerRadius="1dp"
fresco:roundTopLeft="true"
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp"
fresco:roundingBorderColor="@color/border_color"

你可能感兴趣的:(Android)