Fresco是Facebook开源的一个图片加载和管理库,而Fresco的最大特点在于,图片不在Java Heap上分配内存
xmlns:fresco="http://schemas.android.com/apk/res-auto"
//添加命名空间XML布局中
//添加命名空间XML布局中
类型 Scheme 示例
远程图片 http://, https:// HttpURLConnection 或者参考 使用其他网络加载方案
本地文件 file:// FileInputStream
Content provider content:// ContentResolver
asset目录下的资源 asset:// AssetManager
res目录下的资源 res:// Resources.openRawResource
Uri中指定图片数据 data:mime/type;base64, 数据类型必须符合 rfc2397规定 (仅支持 UTF-8)
本地文件 file:// FileInputStream
Content provider content:// ContentResolver
asset目录下的资源 asset:// AssetManager
res目录下的资源 res:// Resources.openRawResource
Uri中指定图片数据 data:mime/type;base64, 数据类型必须符合 rfc2397规定 (仅支持 UTF-8)
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" +
编辑
build.gradle
文件:
1 2 3 4 |
dependencies { // 其他依赖 compile 'com.facebook.fresco:fresco:0.12.0' } |
下面的依赖需要根据需求添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
dependencies { // 在 API < 14 上的机器支持 WebP 时,需要添加 compile 'com.facebook.fresco:animated-base-support:0.12.0' // 支持 GIF 动图,需要添加 compile 'com.facebook.fresco:animated-gif:0.12.0' // 支持 WebP (静态图+动图),需要添加 compile 'com.facebook.fresco:animated-webp:0.12.0' compile 'com.facebook.fresco:webpsupport:0.12.0' // 仅支持 WebP 静态图,需要添加 compile 'com.facebook.fresco:webpsupport:0.12.0' } |
//在Application中进行初始化 ,因为这里直接在清单文件中可以注册,一次性永久使用
public
class
MyApplication
extends
Application
{
@Override
public void onCreate () {
super . onCreate ();
Fresco . initialize ( this );
}
}
@Override
public void onCreate () {
super . onCreate ();
Fresco . initialize ( this );
}
}
//然后去清单文件中注册app并且给网络权限
<manifest
...
>
<uses-permission android:name= "android.permission.INTERNET" />
<application
...
android:label= "@string/app_name"
android:name= ".MyApplication"
>
...
</application>
...
</manifest>
...
>
<uses-permission android:name= "android.permission.INTERNET" />
<application
...
android:label= "@string/app_name"
android:name= ".MyApplication"
>
...
</application>
...
</manifest>
//然后在xml布局中进行命名空间
xmlns:fresco=
"http://schemas.android.com/apk/res-auto"//如果不命名下面无法使用fresco
<?
xml version=
"1.0"
encoding=
"utf-8"
?>
<
LinearLayout
xmlns:
android
=
"http://schemas.android.com/apk/res/android"
xmlns:
app
=
"http://schemas.android.com/apk/res-auto"
xmlns:
tools
=
"http://schemas.android.com/tools"
android
:layout_width=
"match_parent"
android
:layout_height=
"match_parent"
xmlns:
fresco
=
"http://schemas.android.com/apk/res-auto"
tools
:context=
"com.example.frescotupian.MainActivity">
<
com.facebook.drawee.view.SimpleDraweeView
android
:id=
"@+id/my_img_view"
android
:layout_width=
"130dp"
android
:layout_height=
"130dp"
fresco
:actualImageScaleType=
"focusCrop" //实际图片缩放类型
fresco
:placeholderImage=
"@drawable/zhanwei"//占位图
fresco
:progressBarImage=
"@drawable/jiazai" //正在加载图
fresco
:progressBarImageScaleType=
"centerInside"//加载图的缩放类型
fresco
:progressBarAutoRotateInterval=
"5000"//自动旋转间隔时间
fresco
:failureImage=
"@drawable/shibai"//加载失败图
fresco
:failureImageScaleType=
"centerInside"//失败图的缩放类型
fresco
:retryImage=
"@drawable/chongshi"//重试图
fresco
:retryImageScaleType=
"centerCrop"//重试图缩放类型
fresco
:fadeDuration=
"5000"//淡出淡入动画持续时间(毫秒)
fresco
:backgroundImage=
"@android:color/holo_orange_light"//背景图
fresco
:pressedStateOverlayImage=
"@android:color/holo_green_dark"
//按 压下的叠加图
fresco:overlayImage="@android:color/black"//最后的叠加图
fresco
:roundAsCircle=
"true"//是否是圆形
//如果圆形和圆角一起设置只会系那是圆形
fresco
:roundedCornerRadius=
"30dp"//设置圆角半径
fresco
:roundTopLeft=
"true"//左上角是否圆角
fresco
:roundTopRight=
"true"//右上角是否圆角
fresco
:roundBottomLeft=
"true"//左下角是否圆角
fresco
:roundBottomRight=
"true"//右下角是否圆角
fresco
:roundingBorderWidth=
"10dp"//圆形圆角的边框宽度
fresco
:roundingBorderColor=
"@android:color/black"//圆形圆角的边框颜色
fresco
:roundWithOverlayColor=
"@android:color/darker_gray"//叠加颜色
/></
LinearLayout>
开始加载图片:
1 2 3 |
package com.example.frescotupian; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //加载图片 //创建将要下载的图片URL Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png"); //创建simpleDraweeView对象 SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_img_view); //开始下载 draweeView.setImageURI(uri); //创建DraweeController DraweeController controller = Fresco.newDraweeControllerBuilder() //加载的图片URI地址 .setUri(uri) //设置点击重试是否开启 点击4次还没有加载出来就加载失败图 .setTapToRetryEnabled(true) //设置旧的Controller .setOldController(draweeView.getController()) //构建 .build(); //设置DraweeController draweeView.setController(controller); } } |
剩下的,Fresco会替你完成:
- 显示占位图直到加载完成;
- 下载图片;
- 缓存图片;
- 图片不再显示时,从内存中移除;
缩放类型—ScaleType:
类型 | 描述 |
---|---|
center | 居中,无缩放 |
centerCrop | 保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示。 |
focusCrop | 同centerCrop, 但居中点不是中点,而是指定的某个点 |
centerInside | 使两边都在显示边界内,居中显示。如果图尺寸大于显示边界,则保持长宽比缩小图片。 |
fitCenter | 保持宽高比,缩小或者放大,使得图片完全显示在显示边界内。居中显示 |
fitStart | 同上。但不居中,和显示边界左上对齐 |
fitEnd | 同fitCenter, 但不居中,和显示边界右下对齐 |
fitXY | 不保存宽高比,填充满显示边界 |
none | 如要使用tile mode显示, 需要设置为none |
推荐使用:focusCrop 类型
扫描二维码关注公众号,回复:
1067102 查看本文章
总结:
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 | 控件纵横比 |