Android Fresco获取本地缓存的图片

相信大家用过Fresco的都知道Android一个非常强大的Fresco图片加载框架自带三级缓存功能.

1.Bitmap缓存

Bitmap缓存存储Bitmap对象,这些Bitmap对象可以立刻用来显示或者用于后处理

在5.0以下系统,Bitmap缓存位于ashmem,这样Bitmap对象的创建和释放将不会引发GC,更少的GC会使你的APP运行得更加流畅。

5.0及其以上系统,相比之下,内存管理有了很大改进,所以Bitmap缓存直接位于Java的heap上。

当应用在后台运行时,该内存会被清空。

2.未解码图片的内存缓存

这个缓存存储的是原始压缩格式的图片。从该缓存取到的图片在使用之前,需要先进行解码。

如果有调整大小,旋转,或者WebP编码转换工作需要完成,这些工作会在解码之前进行。

APP在后台时,这个缓存同样会被清空。

3.文件缓存

和未解码的内存缓存相似,文件缓存存储的是未解码的原始压缩格式的图片,在使用之前同样需要经过解码等处理。

今天我们就来写一个缓存到本地的图片怎么使用代码将其重新获取出来,废话不多说,直接上代码

阅读即懂,复制即用

首先我们要放上Fresco加载图片框架的第三方依赖

compile 'com.facebook.fresco:fresco:+'

activity_main布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.cf.MainActivity">

    <!--网络请求的图片-->
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/interImg"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerVertical="true"
        android:src="@mipmap/ic_launcher_round"
        app:failureImage="@mipmap/ic_launcher_round"
        app:placeholderImage="@mipmap/ic_launcher_round"
        app:roundAsCircle="true" />

    <!--网络缓存到本地之后获取的图片-->
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/cacheImg"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:src="@mipmap/ic_launcher_round"
        app:failureImage="@mipmap/ic_launcher_round"
        app:placeholderImage="@mipmap/ic_launcher_round" />

</RelativeLayout>
Java代码

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.facebook.binaryresource.FileBinaryResource;
import com.facebook.cache.common.SimpleCacheKey;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.view.SimpleDraweeView;

import java.io.File;

public class MainActivity extends AppCompatActivity {

    private SimpleDraweeView interImg;
    private SimpleDraweeView cacheImg;
    private final String imgUrl = "http://d.lanrentuku.com/down/png/1712/22xiaodongwu/22xiaodongwu_12.png";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);//初始化Fresco
        setContentView(R.layout.activity_main);
        interImg = (SimpleDraweeView) findViewById(R.id.interImg);//网络请求的图片的id
        cacheImg = (SimpleDraweeView) findViewById(R.id.cacheImg);//从本地加载的图片的id
        Uri parse = Uri.parse(imgUrl);
        interImg.setImageURI(parse);

        /**
         * 获取缓存之后的图片
         */
        FileBinaryResource resource = (FileBinaryResource)Fresco.getImagePipelineFactory().getMainFileCache().getResource(new
                SimpleCacheKey(parse.toString()));
        File file = resource.getFile();
        /**
         * 将文件转为uri形式
         */
        Uri uri = Uri.fromFile(file);
        cacheImg.setImageURI(uri);

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值