Fresco使用详情

第一肯定是Fresco地址啦:https://github.com/facebook/fresco

gradle配置:

implementation 'com.facebook.fresco:fresco:1.13.0'

1.在Application 初始化

Fresco.initialize(this);

2.在xml中使用SimpleDraweeView

xmlns:app="http://schemas.android.com/apk/res-auto"
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/avatar"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_margin="10dp"
    android:scaleType="fitXY"
    app:actualImageScaleType="fitCenter" // 实际图缩放类型
    app:placeholderImage="@mipmap/ic_launcher" // 占位图
    app:placeholderImageScaleType="centerInside" // 占位图缩放类型
    app:progressBarImage="@mipmap/common_loading" // 加载图
    app:progressBarImageScaleType="centerInside" // 加载图缩放类型
    app:progressBarAutoRotateInterval="1000" // 加载时间
    app:failureImage="@mipmap/ic_launcher" // 失败图
    app:failureImageScaleType="centerInside" // 失败图缩放类型
    app:retryImage="@mipmap/ic_launcher" // 重试图
    app:retryImageScaleType="centerInside" // 重试图缩放类型
    app:roundAsCircle="true" // 是否为圆角
    app:roundedCornerRadius="30dp" // 圆角的大小
     />

3,加载图片

int width = SystemUtil.dp2px(context, 50);
int height = SystemUtil.dp2px(context, 50);
ImageUtil.load((GenericDraweeView)helper.getView(R.id.avatar), "图片url", width, height);

public static void load(GenericDraweeView draweeView, String url, int width, int height) {
    Uri uri = Uri.parse(url);
    ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
            .setResizeOptions(new ResizeOptions(width, height))
            .build();
    DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setImageRequest(request)
            .setOldController(draweeView.getController())
            .build();
    draweeView.setController(controller);
}

 

4.注意点,SimpleDraweeView必须设置大小

android:layout_width="60dp"
android:layout_height="60dp"

5.缩放类型—ScaleType

类型描述
center居中,无缩放
centerCrop保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示。
focusCrop同centerCrop, 但居中点不是中点,而是指定的某个点
centerInside使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片。
fitCenter保持宽高比,缩小或者放大,使得图片完全显示在显示边界内。居中显示
fitStart同上。但不居中,和显示边界左上对齐
fitEnd同fitCenter, 但不居中,和显示边界右下对齐
fitXY不保存宽高比,填充满显示边界
none如要使用tile mode显示, 需要设置为none

推荐使用:focusCrop 类型                Fresco中文说明对这一点也有详情的说明

 

6.总结

总结:

XML属性意义
fadeDuration淡入淡出动画持续时间(单位:毫秒ms)
actualImageScaleType实际图像的缩放类型
placeholderImage占位图
placeholderImageScaleType占位图的缩放类型
progressBarImage进度图
progressBarImageScaleType进度图的缩放类型
progressBarAutoRotateInterval进度图自动旋转间隔时间(单位:毫秒ms)
failureImage失败图
failureImageScaleType失败图的缩放类型
retryImage重试图
retryImageScaleType重试图的缩放类型
backgroundImage背景图
overlayImage叠加图
pressedStateOverlayImage按压状态下所显示的叠加图
roundAsCircle设置为圆形图
roundedCornerRadius圆角半径
roundTopLeft左上角是否为圆角
roundTopRight右上角是否为圆角
roundBottomLeft左下角是否为圆角
roundBottomRight右下角是否为圆角
roundingBorderWidth圆形或者圆角图边框的宽度
roundingBorderColor圆形或者圆角图边框的颜色
roundWithOverlayColor圆形或者圆角图底下的叠加颜色(只能设置颜色)
viewAspectRatio控件纵横比

 

Fresco缓存也是一大亮点, 三级缓存,分别是 Bitmap缓存,未解码图片缓存, 文件缓存。
这里提一点Bitmap缓存:在5.0以下系统,Bitmap缓存位于ashmem,这样Bitmap对象的创建和释放将不会引发GC,更少的GC会使你的APP运行得更加流畅。5.0及其以上系统,相比之下,内存管理有了很大改进,所以Bitmap缓存直接位于Java的heap上。
另外,磁盘缓存还可以通过代码来设置不同手机的缓存容量:

public void initFresco(Context context, String diskCacheUniqueName){
    DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(context)
            .setMaxCacheSize(DISK_CACHE_SIZE_HIGH)
            .setMaxCacheSizeOnLowDiskSpace(DISK_CACHE_SIZE_LOW)
            .setMaxCacheSizeOnVeryLowDiskSpace(DISK_CACHE_SIZE_VERY_LOW)
            .build();

    ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
            .setMainDiskCacheConfig(diskCacheConfig)
            .build();
    Fresco.initialize(context, config);
}

Glide缓存(比较,有兴趣的人也可以使用这个,个人认为对于目前手机内存来说Fresco更合适
Glide虽然只有内存和磁盘缓存,在性能上比不上Fresco;但他也有另外的优点, Fresco缓存的时候,只会缓存原始图像,而Glide则会根据ImageView控件尺寸获得对应的大小的bitmap来展示,从而缓存也可以针对不同的对象:原始图像(source),结果图像(result); 可以通过.diskCacheStrategy()方法设置

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又双㕛叕、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值