Fresco加载图片

1.MainActivity

package com.example.frescodemo;

import android.Manifest;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.AbstractDraweeController;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.postprocessors.IterativeBoxBlurPostProcessor;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;

public class MainActivity extends AppCompatActivity {

    private SimpleDraweeView simpleDraweeView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        simpleDraweeView = findViewById(R.id.image);
        SimpleDraweeView one = findViewById(R.id.one);
        SimpleDraweeView two= findViewById(R.id.two);
        SimpleDraweeView three= findViewById(R.id.three);
        SimpleDraweeView four = findViewById(R.id.four);
        if (ActivityCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE}, 100);
        }
        showUrlBlur(simpleDraweeView,
                "https://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg",
                1,
                10);
        //加载gif
        DraweeController draweeController = Fresco.newDraweeControllerBuilder()
                //加载assests包下的gif
                .setUri(Uri.parse("asset:///aa.gif"))
                .setAutoPlayAnimations(true)
                .build();
        one.setController(draweeController);

        //one.setImageURI(Uri.parse("https://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg"));
        //加载drawable包下的图片
        two.setImageURI("res:///"+R.drawable.f);
        three.setImageURI(Uri.parse("https://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg"));
        four.setImageURI(Uri.parse("https://img4q.duitang.com/uploads/item/201304/27/20130427043538_wAfHC.jpeg"));

    }
//高斯模糊
    public static void showUrlBlur(SimpleDraweeView draweeView, String url, int iterations, int blurRadius) {
        try {
            Uri uri = Uri.parse(url);//图片url
            ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
                    .setPostprocessor(new IterativeBoxBlurPostProcessor(iterations, blurRadius))
                    .build();
            AbstractDraweeController controller = Fresco.newDraweeControllerBuilder()
                    .setOldController(draweeView.getController())
                    .setImageRequest(request)
                    .build();
            draweeView.setController(controller);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.xml页面

<?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"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/one"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:minHeight="50dp"
    android:layout_margin="10dp"
    app:fadeDuration="1000"/>
  <com.facebook.drawee.view.SimpleDraweeView
      android:id="@+id/two"
      app:roundAsCircle="true"
      android:layout_width="100dp"
      android:layout_height="wrap_content"
      android:adjustViewBounds="true"
      android:minHeight="50dp"
      android:layout_margin="10dp"
      app:fadeDuration="1000"/>
  <com.facebook.drawee.view.SimpleDraweeView
      android:layout_width="100dp"
      android:layout_height="wrap_content"
      android:id="@+id/image"
      android:minHeight="50dp"
      android:adjustViewBounds="true"
      app:roundedCornerRadius="20dp"
      app:roundAsCircle="true"
      app:roundingBorderWidth="5dp"
      app:roundingBorderColor="#ff0"/>
  <com.facebook.drawee.view.SimpleDraweeView
      android:id="@+id/three"
      android:layout_width="100dp"
      android:layout_height="wrap_content"
      android:adjustViewBounds="true"
      android:minHeight="50dp"
      android:layout_margin="10dp"
      app:fadeDuration="1000"
      app:roundedCornerRadius="5dp"
      app:roundTopLeft="true"
      app:roundTopRight="true"
      app:roundBottomLeft="true"
      app:roundBottomRight="true"/>
  <com.facebook.drawee.view.SimpleDraweeView
      android:id="@+id/four"
      android:layout_width="100dp"
      android:layout_height="wrap_content"
      android:adjustViewBounds="true"
      android:minHeight="50dp"
      android:layout_margin="10dp"
      app:fadeDuration="1000"
      app:roundedCornerRadius="5dp"
      app:roundTopLeft="false"
      app:roundTopRight="false"
      app:roundBottomLeft="true"
      app:roundBottomRight="true"/>

</LinearLayout>
<!--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"      //边框填充色-->

3.自定义一个类继承Application

package com.example.app;

import android.app.Application;
import android.os.Environment;

import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;

import java.io.File;

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        File file = new File(Environment.getExternalStorageDirectory()+File.separator+"frescocache");
        Fresco.initialize(this,ImagePipelineConfig.newBuilder(this).
                    setMainDiskCacheConfig(
                DiskCacheConfig.newBuilder(this)
                        .setBaseDirectoryPath(file)
                        .build()
        ).build());

    }
}

4.清单文件中添加权限

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

5.需导入的依赖

 compile 'com.facebook.fresco:fresco:1.10.0'
 implementation 'com.facebook.fresco:animated-gif:1.10.0'

效果图如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<h4>Fresco 的封装,快速上手,图像后处理,超大图高清预览,缩小放大,双击放大等一一俱全。</h4> ====================== [![](https://jitpack.io/v/CarGuo/FrescoUtils.svg)](https://jitpack.io/#CarGuo/FrescoUtils) [![Build Status](https://travis-ci.org/CarGuo/FrescoUtils.svg?branch=master)](https://travis-ci.org/CarGuo/FrescoUtils) ## 因为某些原因,现在使用jitpack.io,还请使用依赖的各位切换到jitpack。 #### 在project下的build.gradle添 ``` allprojects { repositories { ... maven { url 'https://jitpack.io' } } } ``` #### 在module下的build.gradle添 ``` dependencies { compile 'com.github.CarGuo:FrescoUtils:v1.0.8' } ``` * 1.0.8 update fresco to 1.5.0 * 1.0.7 增option配置方法; ``` /** * @param imageView 图片控件 * @param loadOption 配置构造器 */ public static void loadFrescoImage(FrescoImageView imageView, LoadOption loadOption) ``` * 1.0.6 update fresco to 1.3.0; * 1.0.5 update fresco to 1.2.0;移除无用依赖; * 1.0.4 update fresco to 1.0.1,update scaleImage to 3.6.0 * 1.0.3 update fresco to 1.0.0 * 1.0.2 最低API调整到15 * 1.0.1 增了额FrescoHelper直接超大图接口 ``` /** * 超大图片的就接口 * * @param context 上下玩 * @param imageView 图片控件 * @param imageUri 图片地址 * @param defaultId 默认失败图片 */ public static void loadBigImage(final Context context, final SubsamplingScaleImageView imageView, String imageUri, final int defaultId) ``` <h4><a href="http://www.jianshu.com/p/cd058a924288">简书入口 这里有详细介绍</a></h4> ## 效果显示 <img src="https://github.com/CarGuo/FrescoUtils/blob/master/01.jpg" width="240px" height="426px"/> <img src="https://github.com/CarGuo/FrescoUtils/blob/master/02.jpg" width="240px" height="426px"/> <p></p> ### 动态图效果 <img src="https://github.com/CarGuo/FrescoUtils/blob/master/01.gif" width="240px" height="426px"/> <img src="https://github.com/CarGuo/FrescoUtils/blob/master/02.gif" width="240px" height="426px"/> <p></p> ### 记得记得在Application里初始化 ``` ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this) .setDownsampleEnabled(true) .build(); Fresco.initialize(this, config); ``` ### FrescoHelper 封装了针对 <a href="https://github.com/HomHomLin/FrescoImageView">FrescoImageView</a> 的工具类,直接使用FrescoImageView作为ImageView使用即可。 封装了多种类型,这是最全的一种 ``` /** * @param imageView 图片控件 * @param uri 路径或者URL * @param defaultImg 默认图片 * @param cornerRadius 弧形角度 * @param isCircle 是否为圆 * @param loadLocalPath 是否本地资源,如果显示R.drawable.xxx,Path可以为null,前提isCircle为true * @param isAnima 是否显示GIF动画 * @param size 是否再编码 * @param postprocessor 图像显示处理 */ public static void loadFrescoImage(FrescoImageView imageView, String uri, int defaultImg, int cornerRadius, boolean isCircle, boolean loadLocalPath, boolean isAnima, Point size, Postprocessor postprocessor) { init(imageView, cornerRadius, isCircle, isAnima, size, postprocessor); if (loadLocalPath) { imageView.loadLocalImage(uri, defaultImg); } else { imageView.loadView(uri, defaultImg); } } ··· FrescoHelper.loadFrescoImage(frescoImageView, recyclerDataModel.getUrl(), R.mipmap.ic_launcher, 2, false, recyclerDataModel.getSize(), new BlurPostprocessor(context, 10)); ``` ### 带有<a href="https://github.com/wasabeef/fresco-processors">fresco-processors</a>各种处理特效,高斯,五角形等。 <img src="https://github.com/wasabeef/fresco-processors/raw/master/art/demo.gif" width="240px" height="426px"/> ### 带有<a href="https://github.com/davemorrissey/subsampling-scale-image-view">subsampling-scale-image-view</a>实现超高清图片超长图片不模糊显示。 <img src="https://github.com/CarGuo/FrescoUtils/blob/master/01.gif" width="240px" height="426px"/> ### 带有<a href="https://github.com/ongakuer/PhotoDraweeView">PhotoDraweeView</a> 功能与PhotoView一样,支持双击放大,单击返回,手动放大与缩小等。 <img src="https://github.com/ongakuer/PhotoDraweeView/raw/master/screenshot.gif" width="240px" height="426px"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值