android图片传输三方框架,Android开发三种第三方图片加载的框架

最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录。

现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧。

一、Picasso

1,首先在项目中引入picasso(以gradle为例),也就是app的build.gradle

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

2,加载图片,通过源码可以发现load方法主要要以下几种重载

load(Uri uri)

load(String path)

load(File file)

load(int resourceId)

最常使用的应该就是网络加载图片,网络请求完数据之后存到List数组中

Picasso.with(AppApplication.getmContext())//上下文

.load(list.get(i).getPath_vertical_s())//加载的地址

.resize(94, 131)//设置显示的图片大小

.placeholder(R.mipmap.ic_launcher)//图片较大加载慢时显示的图片

.error(R.mipmap.birth)//加载错误时的图片

.into(holder.iv_movie_abouttoshow_moviephoto);//指定显示图片的控件

Picasso的缓存机制:

Picasso的缓存流程是先检查内存是否有保存该图片,如果没有则检查磁盘是否有保存该图片,如果没有则从网络下载,下载成功之后分别保存到内存和磁盘上各一份,如果我们有时候不想缓存该图片或者不想从缓存获取图片,该如何呢?Picasso也给我买提供了相应的控制方法。

.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)

代码含义:该方法表示跳过从磁盘加载图片,并且图片下载之后也不在磁盘中进行缓存。

参数介绍:

MemoryPolicy.NO_CACHE:直接跳过检查内存是否有缓存该图片

MemoryPolicy.NO_STORE:图片下载之后不在内存中进行缓存

这里注意只是不在磁盘中缓存,但是会在内存中缓存,因此若内存和磁盘中都不想缓存则需要和 两个方法共同使用,如下:

.networkPolicy(NetworkPolicy.NO_CACHE, NetworkPolicy.NO_STORE)

.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)

NetworkPolicy枚举中还有一个值OFFLINE,这个表示强制从缓存中取,不会发起网络请求,如 果缓存中没有也不会从网络中请求

3、问题

使用Picasso时(另外两个框架也一样),记得有一次使用的死数据,图片地址批量复制的,复制的时候多操作了一个空格,结果就一直没显示,这也是个坑填一下。

二、Glide

Glide和Picasso其实挺相似的,不管是从使用方法还是从出身

1,还是和Picasso一样添加依赖

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

2,加载图片

//1.网络加载图片到ImageView中,注意这里的大小设置方法和Picasso是有区别的

Glide.with(context).load(imageUrl).override(94,131).into(imageView);//2.当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片,通过placeHolder()方法

Glide.with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).into(imageView);//3.当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示:

Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher).into(imageView);//4.显示gif动画,asGif()判断是否是gif动画

Glide.with(context).load(imageUrl).asGif().into(imageView);//5.显示本地视频

String filePath = "/storage/emulated/0/demo/***.mp4";

Glide.with( context ).load( Uri.fromFile(newFile( filePath ) ) ).into(video );//6.缓存策略

Glide.with( context ).load(imageUrl).skipMemoryCache(true).into(imageViewInternet );//跳过内存缓存

Glide.with( context ).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into( imageViewInternet );//跳过硬盘缓存

三、Fresco

Fresco使用和其他两个有些区别,因为这里要使用的不是ImageView了而是他自己的图片显示控件

代码上:

//其他的属性设置

fresco:fadeDuration="300" // 淡入淡出的持续时间

fresco:actualImageScaleType="focusCrop" // 实际图像的缩放类型

fresco:placeholderImage="@color/wait_color" //占位图

fresco:placeholderImageScaleType="fitCenter" //占位图的缩放类型

fresco:failureImage="@drawable/error" //下载失败显示的图片

fresco:failureImageScaleType="centerInside" //失败图的缩放类型

fresco:retryImage="@drawable/retrying"

//图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片

fresco:retryImageScaleType="centerCrop" //重新加载的图片缩放类型

fresco:progressBarImage="@drawable/progress_bar" //进度条图片

fresco:progressBarImageScaleType="centerInside"

fresco:progressBarAutoRotateInterval="1000"

//进度图自动旋转间隔时间(单位:毫秒ms)

fresco:backgroundImage="@color/blue"

//背景图片,这里的背景图片首先被绘制

fresco:overlayImage="@drawable/watermark"

// 设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦

fresco:pressedStateOverlayImage="@color/red"

// 设置点击状态下的叠加图

fresco:roundAsCircle="false" //设置为圆形图

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" //边框颜色

如果你多次用了Fresco,建议在 Application 初始化,如果只是写着玩,就在应用调用 setContentView() 之前,进行初始化:

AppApplication

Fresco.initialize(mContext);

加载图片

Uri uri =Uri.parse(list.get(i).getPath_vertical_s());

sdv.setImageURI(uri)

DraweeController controller=Fresco.newDraweeControllerBuilder()

.setUri(uri)

.setAutoPlayAnimations(true)

.build();

sdv.setController(controller);

以上就是三种框架的使用方法,此随笔当作学习笔记记录一下。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值