Fresco的使用

Fresco是FaceBook开发用来加载图片的框架,可以说这是当前最好的加载图片以及缓存图片等工具了。在以前我们使用的是ImageLoader或者Pissco。与这两种框架相比Fresco又好在哪里呢?

首先Fresco已经将图片等缓冲封装,我们不需要再使用LrcCache来缓存图片了。而且Fresco还带有许多功能。

我们可以通过以下图片看一下Fresco的特点及功能




至于渐进式加载图片与多图请求该如何做,请看代码:

package com.example.frescodemo;

import android.graphics.drawable.Animatable;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.facebook.common.logging.FLog;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.backends.pipeline.PipelineDraweeController;
import com.facebook.drawee.controller.BaseControllerListener;
import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.image.ImageInfo;
import com.facebook.imagepipeline.image.QualityInfo;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;

public class MainActivity extends AppCompatActivity {

    @ViewInject(R.id.image_view)

    private SimpleDraweeView draweeView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ViewUtils.inject(this);

        Uri uri = Uri.parse("http://...");
        draweeView = (SimpleDraweeView) findViewById(R.id.image_view);
        draweeView.setImageURI(uri);

    }

    /**
     * 要先在MyApplication配置ImagePipelineConfig
     * 渐进式加载图片
     */
    public void requestImage(){
        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse("http://"))
                .setProgressiveRenderingEnabled(true)
                .build();

        PipelineDraweeController controller = (PipelineDraweeController) Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .build();

        draweeView.setController(controller);
    }

    /**
     * 多图请求,图片可设置两个地址
     */
    public void moreImage(){

        /**
         * 监听事件
         */
        ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {

            /**
             * 图片加载成功时调用
             * @param id
             * @param imageInfo
             * @param anim
             */
            @Override
            public void onFinalImageSet(
                    String id,
                    @Nullable ImageInfo imageInfo,
                    @Nullable Animatable anim) {
                if (imageInfo == null) {
                    return;
                }
                QualityInfo qualityInfo = imageInfo.getQualityInfo();
                FLog.d("Final image received! " +
                                "Size %d x %d",
                        "Quality level %d, good enough: %s, full quality: %s",
                        imageInfo.getWidth(),
                        imageInfo.getHeight(),
                        qualityInfo.getQuality(),
                        qualityInfo.isOfGoodEnoughQuality(),
                        qualityInfo.isOfFullQuality());
            }

            @Override
            public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) {
                FLog.d("","Intermediate image received");
            }

            /**
             * 加载失败时调用
             * @param id
             * @param throwable
             */
            @Override
            public void onFailure(String id, Throwable throwable) {
                FLog.e(getClass(), throwable, "Error loading %s", id);
            }
        };


        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setLowResImageRequest(ImageRequest.fromUri("http://小图"))
                .setImageRequest(ImageRequest.fromUri("http:大图"))
                .setControllerListener(controllerListener)
                .build();

        draweeView.setController(controller);
    }

}

<span style="font-family:Microsoft YaHei;">当然我们要新建一个类继承Application在里面对Fresco进行初始化,如下:</span>
<span style="font-family:Microsoft YaHei;"></span><pre name="code" class="java">package com.example.frescodemo;

import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
import com.facebook.imagepipeline.decoder.SimpleProgressiveJpegConfig;

/**
 * Created by 傅炫阳 on 2016/9/21.
 */
public class MyApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();

        ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
                .setProgressiveJpegConfig(new SimpleProgressiveJpegConfig())
                .build();
        Fresco.initialize(this,config);
    }
}


 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值