fresco

Fresco是Facebook开源的一个图片加载和管理库,而Fresco的最大特点在于,图片不在Java Heap上分配内存

xmlns:fresco="http://schemas.android.com/apk/res-auto"
//添加命名空间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)

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 );
}
}

//然后去清单文件中注册app并且给网络权限
<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 类型


总结:

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 控件纵横比

猜你喜欢

转载自blog.csdn.net/qq_40702815/article/details/80307402
今日推荐