Fresco的使用,及属性说明

Fresco是Facebook开源Android平台上一个强大的图片加载库

优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理和强大的功能,基本上能满足所有的日常使用场景。

缺点:整体比较大,不过目前的版本已做了拆分,你只需要导入你使用到的功能相关的库。从代码层面来说侵入性太强,体现在要使用它需要用Fresco的组件SimpleDraweeView替换掉Android原生图片显示组件ImageView,这也是很多人不愿意在项目中接入Fresco的主要原因。

依赖

implementation 'com.facebook.fresco:fresco:1.11.0'            //普通图片
implementation 'com.facebook.fresco:animated-gif:1.10.0'   //加载动态图片

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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=".MainActivity">

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_normal"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    fresco:viewAspectRatio="1"/>
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_circular"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_margin="5dp"
    android:layout_below="@+id/simple_normal"
    fresco:roundAsCircle="true"
    fresco:viewAspectRatio="1"/>
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_corners"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/simple_circular"
    fresco:roundedCornerRadius="8dp"
    fresco:roundBottomLeft="true"
    fresco:roundTopLeft="true"
    fresco:roundBottomRight="true"
    fresco:roundTopRight="true"
    fresco:viewAspectRatio="1"/>
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_border"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_margin="5dp"
    android:layout_below="@+id/simple_corners"
    fresco:roundAsCircle="true"
    fresco:roundingBorderWidth="5px"
    fresco:roundingBorderColor="#ff0"
    fresco:viewAspectRatio="1"/>

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_fuzzy"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_margin="5dp"
    android:layout_below="@+id/simple_border"
    fresco:roundAsCircle="true"
    fresco:viewAspectRatio="1"/>

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_local"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_margin="5dp"
    android:layout_below="@+id/simple_fuzzy"
    fresco:roundAsCircle="true"
    fresco:viewAspectRatio="1"/>
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_sd"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    fresco:roundAsCircle="true"
    fresco:viewAspectRatio="1"/>
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/simple_dynamic"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/simple_sd"
    android:layout_margin="5dp"
    fresco:viewAspectRatio="1"/>

<!--fresco:actualImageScaleType="focusCrop"           //加载得到的图片的缩放类型-->
<!--fresco:fadeDuration="1000"                          -->
<!--fresco:failureImage="@drawable/imgbg"               //加载失败之后显示的图片-->
<!--fresco:failureImageScaleType="centerInside"         //图片缩放类型-->
<!--fresco:placeholderImage="@drawable/imgbg"           //占位图片(未加载之前显示的图片)-->
<!--fresco:placeholderImageScaleType="fitCenter"    -->
<!--fresco:progressBarAutoRotateInterval="1000"         //加载进度条图片旋转周期-->
<!--fresco:progressBarImage="@drawable/progress_bar"    //加载进度条图片-->
<!--fresco:progressBarImageScaleType="centerInside"-->
<!--fresco:retryImage="@mipmap/ic_launcher"             //提示重新加载的图片资源-->
<!--fresco:retryImageScaleType="centerCrop"-->
<!--fresco:backgroundImage="@color/colorWhite"          //背景图片-->
<!--fresco:roundAsCircle="false"                        //是否要将图片剪切成圆形-->
<!--fresco:viewAspectRatio="1"                          //图片宽高比-->
<!--fresco:overlayImage="@drawable/overlay"             //在图片上方覆盖一个图片资源-->
<!--fresco:pressedStateOverlayImage="@color/colorBlack"-->
<!--fresco:roundedCornerRadius="20dp"                   //圆角角度,-->
<!--fresco:roundTopLeft="true"                          //设置哪个角需要变成圆角-->
<!--fresco:roundTopRight="false"-->
<!--fresco:roundBottomLeft="false"-->
<!--fresco:roundBottomRight="true"-->
<!--fresco:roundWithOverlayColor="@color/colorWhite"    //圆角部分填充色-->
<!--fresco:roundingBorderWidth="2dp"                    //边框宽度-->
<!--fresco:roundingBorderColor="@color/colorBlack"      //边框填充色-->
<!--/>-->

</RelativeLayout>

Application 在Application中初始化

public class MyApplication extends Application {
@Override
public void onCreate() {
    super.onCreate();
    //自定义缓存目录
    File file = new File(Environment.getExternalStorageDirectory()+File.separator+"fresco_image");
/*
    * Fresco.initialize(this); 初始化
    * 
    * */
    
    //添加自定义缓存目录
    Fresco.initialize(this,
            ImagePipelineConfig.newBuilder(this)
            .setMainDiskCacheConfig(DiskCacheConfig.newBuilder(this)
                    .setBaseDirectoryPath(file)
                    .build())

            .build()
    );//初始化
}
}

Activity fresco的使用

public class MainActivity extends AppCompatActivity {
private SimpleDraweeView
        simple_normal,
        simple_circular,
        simple_corners,
        simple_border,
        simple_fuzzy,
        simple_local,
        simple_sd,
        simple_dynamic;
String urlImage = "https://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg";
String ss = "http://c.hiphotos.baidu.com/image/w%3D500/sign=64d9fd84bc003af34dbadc60052bc619/37d12f2eb9389b501dc8fddf8f35e5dde7116e03.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
    }
    simple_dynamic = findViewById(R.id.simple_dynamic);
    simple_sd = findViewById(R.id.simple_sd);
    simple_fuzzy = findViewById(R.id.simple_fuzzy);
    simple_normal = findViewById(R.id.simple_normal);
    simple_circular = findViewById(R.id.simple_circular);
    simple_corners = findViewById(R.id.simple_corners);
    simple_border = findViewById(R.id.simple_border);
    simple_local = findViewById(R.id.simple_local);

    DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setUri(Uri.parse(ss))
            .setAutoPlayAnimations(true)
            .build();

    simple_dynamic.setController(controller);//动态图

    simple_fuzzy.setImageURI(Uri.parse(urlImage));       //高斯模糊
    simple_border.setImageURI(Uri.parse(urlImage));      //边框
    simple_normal.setImageURI(Uri.parse(urlImage));     //正常图片
    simple_circular.setImageURI(Uri.parse(urlImage));  //圆形图片
    simple_corners.setImageURI(Uri.parse(urlImage));   //圆角图片




    //加载drawable
    Uri parse = Uri.parse("res://" + this.getPackageName() + "/" + R.drawable.yan);
    simple_local.setImageURI(parse); //drawable图片

    //加载Fresco默认缓存图片
    FileBinaryResource resource= (FileBinaryResource) Fresco.getImagePipelineFactory().getMainFileCache().getResource(new SimpleCacheKey(urlImage.toString()));
    File file = resource.getFile();
    Uri uri = Uri.fromFile(file);
    simple_sd.setImageURI(uri);
/**
     * 以高斯模糊显示。
     *
     * draweeView View。
     * url    url.
     * iterations 迭代次数,越大越魔化。
     * blurRadius 模糊图半径,必须大于0,越大越模糊。
     */
    showUrl(simple_fuzzy,urlImage,10,5);
}

private static void showUrl(SimpleDraweeView draweeView,String urlImage, int iterations, int blurRadius){

    try {

        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(urlImage))
                .setPostprocessor(new IterativeBoxBlurPostProcessor(iterations, blurRadius))
                .build();

        AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
                .setOldController(draweeView.getController())
                .setImageRequest(request)
                .build();
        draweeView.setController(controller);

    }catch (Exception e){
        e.printStackTrace();
    }finally {
    }
}
}

效果图

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值