Fresco,Facbook强大的图片加载框架

news/2024/7/20 13:41:28 标签: 移动开发, git, 内存管理

项目git地址:https://github.com/facebook/fresco

Fresco是 facebook推出的一款强大的图片加载的框架;主要有Image Pipeline和Drawees两大模块;
Image Pipeline模块:
Fresco 中设计有一个叫做 Image Pipeline  的模块。它负责从网络,从本地文件系统,本地资源加载图 的模块。为了最大限度节省空间和CPU时间,它含有3 3级缓存设计(2级内存,1级磁盘)。
Drawees模块:
Fresco 中设计有一个叫做  Drawees   模块,它会在图片加载完成前显示占位图,加载成功后自动替换为目标 。当图片不再显示在屏幕上时,它会及时地释放内存和空间占用。
Fresco特性
(1)内存管理
解压后的图片,即Android中的Bi tmap,占用大量的内存。大的内存占用势必引发更加频繁的GC。在5.0以下,GC将会
显著地引发界面卡顿。
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这
会使得APP更加流畅,减少因图片内存占用而引发的OOM。
(2)图片加载
Fresco的Image Pipeline允许你用很多种方式来自定义图片加载过程,比如:
为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片
先显示一个低清晰度的图片,等高清图下载完之后再显示高清图
加载完成回调通知
对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图
缩放或者旋转图片
对已下载的图片再次处理
(3)图片绘制
Fresco 的 Drawees 设计,带来一些有用的特性:
自定义居中焦点
圆角图,当然圆圈也行
下载失败之后,点击重现下载
自定义占位图,自定义overlay, 或者进度条
指定用户按压时的overlay
(4)图片的渐进式呈现
渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现
逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。
Android 本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩
下的事情,Fresco会处理。
(5)支持gif等动态图加载;
Fresco的使用:
(1),gitHub下载依赖库或者jar包;Anroid Studio可以通过compile方式加载:
compi le 'com.facebook.fresco:fresco:0.8.1'
(2),添加网络权限;
<uses-permission android:name="android.permission.INTERNET"/>
(3),在Application中初始化Fresco;
Fresco.initialize(this);
 (3),layout布局文件中声明控件;
<com.facebook.drawee.view.SimpleDraweeView
         android:id="@+id/image_view"
         android:layout_width="300dp"
          android:layout_height="300dp"
         fresco:placeholderImage="@mipmap/ic_launcher"/>
(4),加载网络图片
Uri uri = Uri.parse("http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg");
   image_view.setImageURI(uri);
当然上面提到的SimpleDraweeView只是Drawee其中的控件,没有什么很特别的需求使用它就够了,下面贴一下它里面的一
些属性:
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/image_view"
    android:layout_width="300dp"
    android:layout_height="300dp"
    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"
    fresco:retryImageScaleType="centerCrop"
    fresco:progressBarImage="@drawable/progress_bar"
    fresco:progressBarImageScaleType="centerInside"
    fresco:progressBarAutoRotateInterval="1000"
    fresco:backgroundImage="@color/blue"
    fresco:overlayImage="@drawable/watermark"
    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"
  />
简单介绍一下上面的属性:
placeholderImage就是所谓的展位图啦,在图片没有加载出来之前你看到的就是它
failureIamge看到名字就知道是什么了,图片加载失败时显示的图片就是它了
retryImage图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片
progressBarImage进度条图片
backgroundImage背景图片,这里的背景图片首先被绘制
overlayImage设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦
pressedStateOverlayImage设置点击状态下的叠加图,此叠加图不能缩放
ImageScaleType这个就是各种各样的图片缩放样式了,center,centerCrop,fouseCrop,centerInside,fitCenter,fitStart,fitEnd,fitXY
剩下的属性就是对圆角的处理了

转载于:https://www.cnblogs.com/android-blogs/p/5778858.html


http://www.niftyadmin.cn/n/1543684.html

相关文章

失望,迷茫

那时候&#xff0c;看着身边的这些朋友&#xff0c;每个人都有属于自己的故事&#xff0c;自己的人生。不同的过往&#xff0c;现在和将来。我常常想&#xff0c;生活究竟有多少种可能性&#xff0c;或许只是一个小小的选择&#xff0c;人生就会走上一条完全不同的道路。曾经对…

长时间停留在calculating requirements and dependencies 解决方案

如果Eclipse花费了很长的时间calculating requirements and dependencies&#xff08;计算需求和依赖性 &#xff09; 这个问题通常就是在点击安装之后显示“Calculating requirements and dependencies”&#xff0c;然后进度条不动&#xff0c;调出系统监视器会发现压根儿没下…

【java】java中向上转型和向下转型相关知识

这个问题一直困扰了我很久&#xff0c;现在抽空整理一下。一家之言&#xff0c;难免有错误之处&#xff0c;欢迎纠错。 拿经常举的例子来说&#xff0c;定义一个Animal类&#xff0c;然后定义一个类Dog继承自Animal&#xff0c;定义一个Cat类也继承自Animal&#xff0c;他们的…

如何识别防空警报的类型

今天&#xff0c;9.18。一个值得纪念的日子&#xff0c;很多城市都拉防空警报&#xff0c;有几个人能听懂呢&#xff1f; 国家规定防空袭警报信号分为预先警报、空袭警报、解除警报三种。 预先警报&#xff1a;预先告诉人们敌人即将空袭城市&#xff0c;要求做…

hdu1561-The more, The Better(树形dp)

Problem DescriptionACboy很喜欢玩一种战略游戏&#xff0c;在一个地图上&#xff0c;有N座城堡&#xff0c;每座城堡都有一定的宝物&#xff0c;在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因&#xff0c;有些城堡不能直接攻克&#xff0c;要攻克这些…

wireshark抓取环回接口

linux环境下&#xff0c;用tcpdump&#xff0c;可以用-i lo参数抓取环回接口的包。如果服务端和客户端安装在同一台机器上&#xff0c;调试时是很方便的。linux版的wireshark&#xff0c;选取网卡的菜单里也有lo选项&#xff0c;也很方便。在windows环境下&#xff0c;似乎找不…

【Java】equals和==的区别和联系

这个是我总结的&#xff0c;一家之言&#xff0c;欢迎大家批评指正&#xff0c;欢迎留言 。 1.关于 是一个运算符&#xff0c;当两个对象用连接的时候&#xff0c;返回一个布尔类型的值&#xff0c;要么是true&#xff0c;要么是false。它比较的是两个对象在内存中的地址&…

CSS入门级学习

css入门学习1:认识CSS  1.1&#xff1a;css简介&#xff0c;css全称是层叠样式表&#xff0c;Cascading style sheets   1.2&#xff1a;css的作用&#xff0c;主要是用于定义html内容在浏览器内的显示样式&#xff0c;如文字大小&#xff0c;颜色&#xff0c;字体加粗等  …