当前位置: 代码迷 >> 综合 >> 图片加载和处理的又一个神器 Fresco 的使用摘要记录
  详细解决方案

图片加载和处理的又一个神器 Fresco 的使用摘要记录

热度:60   发布时间:2023-12-16 16:27:39.0

官方网站:http://fresco-cn.org/


为什么使用Fresco:
Fresco 会替我们完成,显示占位图直到加载完成,下载图片,缓存图片,图片不再显示时候,从内存中移出;
注意Fresco的图片的宽高一定不能都是wrap_content,如果都是的话就不会显示图片了0: 首先需要导入Frsco的包
1: 然后需要添加网络的访问权限
++++++++++++++++++++++++++++++++++++2: 然后新建一个Application 在这个里面执行Fresco.initialize(context)的初始化
3:然后在xml 的布局文件中,加入命名空间xmlns:android="http://schemas.android.com/apk/res/android"xmlns:fresco="http://schemas.android.com/apk/res-auto"
4:在布局中加入SimpleDraweeView,注意这里的placeholderImage 是用来显示站位图的。
<com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/my_image_view"android:layout_width="20dp"android:layout_height="20dp"fresco:placeholderImage="@drawable/my_drawable"/>5: setImageURI()的方法来添加图片。
剩下的Fresco 会替我们完成,显示占位图知道加载完成,下载图片,缓存图片,图片不再显示时候,从内存中移出。6:其中setImageURI(),
如果是网络上面的图片直接就是Uri.parse(网址),
如果是包里面的文件就是使用res://mipmap/+R.mipmap.yoyo
如果是android 手机目录中的文件就要使用file:///data/data/com.example.xue.frescodemo/files/345.jpg 注意 file是三条杠如果需要用到mipmap里面的图片使用:
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher)draweeView_url.setImageURI(Uri.parse("https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7NndTQW9VZTlZV2s/materialdesign_principles_bold.png"));
draweeView_res.setImageURI(Uri.parse("res://mipmap/"+R.mipmap.yoyo));
draweeView_local.setImageURI(Uri.parse("file:///data/data/com.example.xue.frescodemo/files/345.jpg"));7:还可以设置进度条:使用的方法是setProgressBarImage
++++++++++++++++++++++++++++++++++++++++++++++



笔记:

如果需要用到mipmap里面的图片使用:
Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher)

draweeView_url.setImageURI(Uri.parse("https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7NndTQW9VZTlZV2s/materialdesign_principles_bold.png"));
draweeView_res.setImageURI(Uri.parse("res://mipmap/"+R.mipmap.yoyo));
draweeView_local.setImageURI(Uri.parse("file:///data/data/com.example.xue.frescodemo/files/345.jpg"));


要设置进度条:
要显示进度,最简单的办法就是在 构建 hierarchy 时使用 ProgressBarDrawable,如下:
.setProgressBarImage(new ProgressBarDrawable())
        GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy genericDraweeHierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build();


        GenericDraweeHierarchyBuilder builder_res = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy genericDraweeHierarchy_res = builder_res.setProgressBarImage(new ProgressBarDrawable()).build();


        draweeView_url.setHierarchy(genericDraweeHierarchy);
        draweeView_res.setHierarchy(genericDraweeHierarchy_res);

设置缓存:

/**
 * Created by XUE on 2015/12/30.
 */
public class BaseApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
                .setBitmapMemoryCacheParamsSupplier(new Supplier<MemoryCacheParams>() {
                    @Override
                    public MemoryCacheParams get() {


                        return new MemoryCacheParams(20<<20,
                                100,
                                Integer.MAX_VALUE,
                                Integer.MAX_VALUE,
                                Integer.MAX_VALUE
                        );
                    }
                }).setMainDiskCacheConfig(DiskCacheConfig.newBuilder()
                .setMaxCacheSize(50<<20)
                .setBaseDirectoryPath(getCacheDir())
                .setBaseDirectoryName("fresco")
                .build())
                .setBitmapsConfig(Bitmap.Config.RGB_565)
                .build();
        Fresco.initialize(this);
    }
}




引入Fresco

1. Android Studio 或者 Gradle

dependencies {
     compile 'com.facebook.fresco:fresco:0.6.0+'
}

开始使用 Fresco

如果你仅仅是想简单下载一张网络图片,在下载完成之前,显示一张占位图,那么简单使用SimpleDraweeView 即可。

为了下载网络图片,请确保在 AndroidManifest.xml 中有以下权限:

<uses-permission android:name="android.permission.INTERNET"/>

在 Application 初始化时,在应用调用 setContentView() 之前,进行初始化:(这里需要自己自定义Application,然后在清单文件中指定)

Fresco.initialize(context);

在xml布局文件中, 加入命名空间:

<!-- 其他元素 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:fresco="http://schemas.android.com/apk/res-auto">

加入SimpleDraweeView:

<com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/my_image_view"android:layout_width="20dp"android:layout_height="20dp"fresco:placeholderImage="@drawable/my_drawable"/>

开始加载图片

Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);

剩下的,Fresco会替你完成:

  • 显示占位图直到加载完成;
  • 下载图片;
  • 缓存图片;
  • 图片不再显示时,从内存中移除;

关键概念

Drawees

Drawees 负责图片的呈现,包含几个组件,有点像MVC模式。

DraweeView

继承于 View, 负责图片的显示。

一般情况下,使用SimpleDraweeView 即可. 简单的用法,在这个页面:开始使用 。

它支持很多自定义效果,参见这里: 自定义显示效果.

DraweeHierarchy