Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。还不需要另行引入第三方或者自定义控件实现图片的圆角显示.只需要设置几个属性值即可.下面便是该框架的使用:
1.引入fresco:
compile 'com.facebook.fresco:fresco:0.12.0'
其中0.12.0是fresco的版本;
如果有其他需要也可以引入其他的相关,详情请看官方文档:
该项目的中文网站是:http://www.fresco-cn.org/,在Github上面是:https://github.com/facebook/fresco
2初始化:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}}
1.引入布局中
在布局文件中加上SimpleDraweeView,用来显示图片
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/network_image_view"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"/>
如果是圆角的话,可以在上面的基础上增加如下特殊配置,其中fresco:roundedCornerRadius根据需要具体设置值:
fresco:roundAsCircle="false"
fresco:roundBottomLeft="true"
fresco:roundBottomRight="true"
fresco:roundTopLeft="true"
fresco:roundTopRight="true"
fresco:roundedCornerRadius="10dp"
XML中会用到Fresco的自定义View。在最顶层的布局文件中加上命名空间,这样可以使用Fresco自定义的一些属性:
xmlns:fresco="http://schemas.android.com/apk/res-auto"
4.加载图片
String url=""http://7xsonf.com1.z0.glb.clouddn.com/o_1bqtv6i0us6qeaem5ojj57i7.png";
Uri uri = Uri.parse(url);
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.network_image_view);
draweeView.setImageURI(uri);
剩下的,Fresco会替你完成:
显示占位图直到加载完成;
下载图片;
缓存图片;
图片不再显示时,从内存中移除;
等等等等。
注意:Fresco.initialize()方法,该方法有两种传参方式:
/** Initializes Fresco with the default config. */
publicstaticvoidinitialize(Context context)
/** Initializes Fresco with the specified config. */
publicstaticvoidinitialize(Context context, ImagePipelineConfig imagePipelineConfig)
其中不对ImagePipeline进行配置的话,Fresco将采用默认的配置.当然你也可以自己设置.
注意事项:
1.布局中如果使用了fresco的属性,则需要引入命名空间:
xmlns:fresco="http://schemas.android.com/apk/res-auto"
2.SimpleDraweeView不支持wrap_content属性,必须给出具体的宽高值,如果width或者height其中有一个值为wrap_content,则可以通过设置宽高比的方法setAspectRatio间接指定其值;
3.使用SimpleDraweeView后,facebook官方建议不要再使用ImageView的任何属性,如setImageResource、setBackground、setScaleType等;后续版本SimpleDraweeView旨在改为直接继承View;
4.永远不要把DraweeHierarchy通过DraweeView.setHierarchy设置给不同的View。DraweeHierarchy 是由一系列 Drawable 组成的。在 Android 中, Drawable 不能被多个 View 共享。
5:不要直接给DraweeView设置图片。
目前DraweeView直接继承于 ImageView,因此它有setImageBitmap,setImageDrawable等方法。
如果利用这些方法直接设置一张图片,内部的DraweeHierarchy就会丢失,也就无法取到image pipeline 的任何图像了。
6.加载特别特别大的图片时最容易导致这种情况。如果你加载的图片比承载的View明显大出太多,那你应该考虑将它Resize一下。给ImageRequest默认配置上setResizeOptions(resizeOptions)属性;对于照片墙等含有大量图片的页面,必须要对图片的大小做限制;网络图片可以通过服务端来对图片的尺寸、质量、图片类型做处理后再返给客户端,但是对于手机本地的图片,就只能通过setResizeOptions来有效降低内存缓存的开销;
网友评论