首页 > 学院 > 开发设计 > 正文

Glide、Picasso与与Fresco要点

2019-11-07 23:21:29
字体:
来源:转载
供稿:网友

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

<android.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"
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表