注意 SimpleDraweeView 控件

的高不能是

wrap_content

原网址 https://www.fresco-cn.org/docs/getting-started.html

http://blog.csdn.net/android_ls/article/details/53137867

https://www.cnblogs.com/liushilin/p/5659301.html

https://www.jianshu.com/p/e67baa8b867d

先导入依赖:

dependencies {// 其他依赖compile 'com.facebook.fresco:fresco:0.12.0'
}

下面的依赖需要根据需求添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dependencies {// 在 API < 14 上的机器支持 WebP 时,需要添加compile 'com.facebook.fresco:animated-base-support:0.12.0'// 支持 GIF 动图,需要添加compile 'com.facebook.fresco:animated-gif:0.12.0'// 支持 WebP (静态图+动图),需要添加compile 'com.facebook.fresco:animated-webp:0.12.0'compile 'com.facebook.fresco:webpsupport:0.12.0'// 仅支持 WebP 静态图,需要添加compile 'com.facebook.fresco:webpsupport:0.12.0'
}

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

在加载图片之前,你必须初始化Fresco类。你只需要调用Fresco.initialize一次即可完成初始化,在 Application 里面做这件事再适合不过了(如下面的代码),注意多次的调用初始化是无意义的。

1
2
3
4
5
6
7
8
[MyApplication.java]
public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();Fresco.initialize(this);}
}

做完上面的工作后,你需要在 AndroidManifest.xml 中指定你的 Application 类。为了下载网络图片,请确认你声明了网络请求的权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
  <manifest...><uses-permission android:name="android.permission.INTERNET" /><application...android:label="@string/app_name"android:name=".MyApplication">...</application>...</manifest>

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

1
2
3
4
5
6
<!-- 其他元素-->
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:fresco="http://schemas.android.com/apk/res-auto"android:layout_height="match_parent"android:layout_width="match_parent">

加入SimpleDraweeView:

1
2
3
4
5
6
<com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/my_image_view"android:layout_width="130dp"android:layout_height="130dp"fresco:placeholderImage="@drawable/my_drawable"/>

开始加载图片:

1
2
3
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
类型 描述
center 居中,无缩放
centerCrop 保持宽高比缩小或放大,使得两边都大于或等于显示边界。居中显示。
focusCrop 同centerCrop, 但居中点不是中点,而是指定的某个点
centerInside 使两边都在显示边界内,居中显示。
如果图尺寸大于显示边界,则保持长宽比缩小图片。
fitCenter 保持宽高比,缩小或者放大,使得图片完全显示在显示边界内。居中显示
fitStart 同上。但不居中,和显示边界左上对齐
fitEnd 同fitCenter, 但不居中,和显示边界右下对齐
fitXY 不保存宽高比,填充满显示边界
none 如要使用tile mode显示, 需要设置为none
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
fresco:fadeDuration= "300"  // 淡入淡出的持续时间
fresco:actualImageScaleType= "focusCrop"   // 实际图像的缩放类型
fresco:placeholderImage= "@color/wait_color"   //占位图
fresco:placeholderImageScaleType= "fitCenter"  //占位图的缩放类型
fresco:failureImage= "@drawable/error"  //下载失败显示的图片
fresco:failureImageScaleType= "centerInside"  //失败图的缩放类型
fresco:retryImage= "@drawable/retrying"
//图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片
fresco:retryImageScaleType= "centerCrop"  //重新加载的图片缩放类型
fresco:progressBarImage= "@drawable/progress_bar"  //进度条图片
fresco:progressBarImageScaleType= "centerInside"
fresco:progressBarAutoRotateInterval= "1000"
//进度图自动旋转间隔时间(单位:毫秒ms)
fresco:backgroundImage= "@color/blue"
//背景图片,这里的背景图片首先被绘制
fresco:overlayImage= "@drawable/watermark"
// 设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦
fresco:pressedStateOverlayImage= "@color/red"
// 设置点击状态下的叠加图
fresco:roundAsCircle= "false"  //设置为圆形图
fresco:roundedCornerRadius= "1dp"  // 圆角半径
fresco:roundTopLeft= "true"  // 左上角是否为圆角
fresco:roundTopRight= "false"
fresco:roundBottomLeft= "false"
fresco:roundBottomRight= "true"
fresco:roundWithOverlayColor= "@color/corner_color"
fresco:roundingBorderWidth= "2dp"  //边框的宽度
fresco:roundingBorderColor= "@color/border_color"  //边框颜色

 private SimpleDraweeView dra;private String doongpath = "http://ww1.sinaimg.cn/large/85cccab3gw1ete12o9vtwg20dc0a0n9w.jpg";private String jingtai = "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1514206108&di=15ef513018095a6115eddc8dec65b2be&src=http://i1.hdslb.com/bfs/archive/6fe21b97ccb59d8328a1dd68e8c35df0c75f2073.jpg";private String jianjin = "http://pic.baike.soso.com/p/20130709/20130709124204-549816457.jpg";private Uri uri;private SimpleDraweeView jinttai;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);jinttai = (SimpleDraweeView) findViewById(R.id.jingtai);//动态图设置圆形 必须设置背景颜色 静态图片只设置圆的属性就可以
        dra = (SimpleDraweeView) findViewById(R.id.drawee);uri = Uri.parse(doongpath);Uri uri1 = Uri.parse(jingtai);//jinttai.setImageURI(uri1);
    }public void xuanzhuan(View view) {Uri uri1 = Uri.parse(jingtai);/*   ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri1)
                .setAutoRotateEnabled(true)
                .build();
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .build();
        jinttai.setController(controller);*/
        jinttai.setImageURI(uri1);}public void tiaoxing(View view) {ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri).setAutoRotateEnabled(true).build();GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
//创建参数对象,设置其样式为进度条
        GenericDraweeHierarchy hierarchy = builder.setProgressBarImage(new ProgressBarDrawable()).build();DraweeController controller = Fresco.newDraweeControllerBuilder()
//                支持动图
                .setAutoPlayAnimations(true).setImageRequest(request).build();dra.setHierarchy(hierarchy);dra.setController(controller);}public void suofang(View view) {Uri uri1 = Uri.parse(jingtai);
//        让图片变模糊
       /* int width = 100, height = 100;
        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri1)
                .setResizeOptions(new ResizeOptions(width, height))
                .build();*/
//       图片缩放
        GenericDraweeHierarchy hierarchy = jinttai.getHierarchy();
//        缩放类型
        //  hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE);
//        放大的类型
        hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER);
//         根据point设置的缩放先拿个方向偏移
        hierarchy.setActualImageScaleType(FOCUS_CROP);PointF point = new PointF();point.set(0f, 0f);hierarchy.setActualImageFocusPoint(point);}public void jianjin(View view) {Uri uri2 = Uri.parse(jianjin);
// 获取图片URL
// 加载质量配置,为了实现节省CPU,随着图片下载的进行,下载完的扫描序列如下: 1, 4, 5, 10
/* 首次调用getNextScanNumberToDecode返回为2, 因为初始时,解码的扫描数为0。
 那么1将不会解码,下载完成4个扫描时,解码一次。下个解码为扫描数为6(5不会解码,10才会解码)*/
        ProgressiveJpegConfig jpegConfig = new ProgressiveJpegConfig() {@Override
            public int getNextScanNumberToDecode(int scanNumber) {return scanNumber + 2;}@Override
            public QualityInfo getQualityInfo(int scanNumber) {boolean isGoodEnough = (scanNumber >= 5);return ImmutableQualityInfo.of(scanNumber, isGoodEnough, false);}};//上面的和下面一行是固定代码.使用使复制粘贴即可
        ImagePipelineConfig.newBuilder(this).setProgressiveJpegConfig(jpegConfig).build();
// 创建 ImageRequest 对象.
        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri2)//设置URL
                .setProgressiveRenderingEnabled(true)//打开渐进 渲染
                .build();DraweeController draweeController = Fresco.newDraweeControllerBuilder()
//必须要设置ImageRequest对象,里面包含了图片的网址.
                .setImageRequest(request)
//开启用户点击重新加载图片的功能
                .setTapToRetryEnabled(true)
//会复用以前的对象,可以节省内存.
                .setOldController(jinttai.getController()).build();
// 1设置加载的控制
        jinttai.setController(draweeController);}public void jianting(View view) {Uri uri1 = Uri.parse(jingtai);
//        fresco的监听事件
        DraweeController controller = Fresco.newDraweeControllerBuilder().setUri(uri1).setControllerListener(new BaseControllerListener<ImageInfo>() {@Override
                    public void onSubmit(String id, Object callerContext) {super.onSubmit(id, callerContext);}//                    成功的方法了
                    @Override
                    public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {super.onFinalImageSet(id, imageInfo, animatable);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());}//  如果允许呈现渐进式JPEG,同时图片也是渐进式图片,
                    //onIntermediateImageSet会在每个扫描被解码后回调。
                    // 具体图片的那个扫描会被解码,参见渐进式JPEG图
                    @Override
                    public void onIntermediateImageSet(String id, ImageInfo imageInfo) {super.onIntermediateImageSet(id, imageInfo);}//中间的失败
                    @Override
                    public void onIntermediateImageFailed(String id, Throwable throwable) {super.onIntermediateImageFailed(id, throwable);}//失败
                    @Override
                    public void onFailure(String id, Throwable throwable) {super.onFailure(id, throwable);}//                     释放
                    @Override
                    public void onRelease(String id) {super.onRelease(id);}}).build();jinttai.setController(controller);}public void wangge(View view) {Uri uri3 = Uri.parse(jingtai);
//        添加红色的网格
        Postprocessor redMeshPostprocessor = new BasePostprocessor() {@Override
            public String getName() {return "redMeshPostprocessor";}@Override
            public void process(Bitmap bitmap) {for (int x = 0; x < bitmap.getWidth(); x += 2) {for (int y = 0; y < bitmap.getHeight(); y += 2) {bitmap.setPixel(x, y, Color.RED);}}}};ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri3).setPostprocessor(redMeshPostprocessor).build();PipelineDraweeController controller = (PipelineDraweeController)Fresco.newDraweeControllerBuilder().setImageRequest(request).setOldController(jinttai.getController())// other setters as you need
                        .build();jinttai.setController(controller);}public void xiaogai(View view) {Uri uri3 = Uri.parse(jingtai);
//        添加红色的网格
        Postprocessor redMeshPostprocessor = new BasePostprocessor() {@Override
            public String getName() {return "redMeshPostprocessor";}@Override
            public CloseableReference<Bitmap> process(Bitmap sourceBitmap,PlatformBitmapFactory bitmapFactory) {CloseableReference<Bitmap> bitmapRef = bitmapFactory.createBitmap(sourceBitmap.getWidth() / 2,sourceBitmap.getHeight() / 2);try {Bitmap destBitmap = bitmapRef.get();for (int x = 0; x < destBitmap.getWidth(); x+=2) {for (int y = 0; y < destBitmap.getHeight(); y+=2) {destBitmap.setPixel(x, y, sourceBitmap.getPixel(x, y));}}return CloseableReference.cloneOrNull(bitmapRef);} finally {CloseableReference.closeSafely(bitmapRef);}}};ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri3).setPostprocessor(redMeshPostprocessor).build();PipelineDraweeController controller = (PipelineDraweeController)Fresco.newDraweeControllerBuilder().setImageRequest(request).setOldController(jinttai.getController())// other setters as you need
                        .build();jinttai.setController(controller);}
}

fresco 图片加载相关推荐

  1. Fresco图片加载+EventBus+Butterknife+Retrofit+RxJava+RxAndroid

    使用MVP框架搭建,分包明确,V层和M层解耦,通过接口完成V层和P层以及P层和M层通信,解决内存泄漏问题 Retrofit做网络请求,封装网络请求工具类,使用单例模式,添加日志拦截器打印网络请求内容 ...

  2. (三) 技术选型 1.项目框架模式:MVP(得分点);注意:分包分层,避免内存泄漏; 2.图片加载:Fresco图片加载框架; 3.网络加载框架:retrofit;使用Retrofit+RxJ

    首先呢    先把业务逻辑需求讲一下  大致思路都是根据自己所想的去做,下面是我个人做的一个小model,希望能帮到有需要的人 业务逻辑需求 1.MVP分包分层:Model.View.Presente ...

  3. Fresco图片加载框架的介绍,相关开源库以及工具类的封装

    Fresco图片加载框架的介绍,相关开源库以及工具类的封装 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 简介 Fresco 是Facebook开源的安卓上的 ...

  4. Fresco图片加载框架使用方法完全指南

    简介 Fresco 是Facebook开源的安卓上的图片加载框架,也可以说是至今为止安卓上最强大的图片加载框架. 相对于其他几个图片加载框架,Fresco主要的优点在于更好的内存管理和更强大的功能,更 ...

  5. Fresco图片加载工具

    原文链接:http://www.fresco-cn.org/ 关于 Fresco Fresco 是一个强大的图片加载组件. Fresco 中设计有一个叫做 image pipeline 的模块.它负责 ...

  6. Fresco图片加载库的使用(SimpleDraweeView的简单使用 )

    一.简介 Fresco 的出现,似乎将 Android 的图片加载做到了极致 Fresco 中文说明:http://www.fresco-cn.org/ Fresco 项目GitHub地址:https ...

  7. 【Android】Fresco图片加载框架(二)————Producer

    /** * 本文可以随意转载到任何网站或者App, * BUT * 转载也要按"基本法", * 请注明原文出处和作者 */ 官方源码地址 fresco官方高大上介绍(1)(注意:前 ...

  8. 常用的图片加载库的区别(Gilde,Picasso,Image-loader,Fresco)

    Gilde,Picasso,Image-loader,Fresco图片加载库的使区别 Glide Glide是一个非常成熟的图片加载库,他可以从多个源加载图片,如:网路,本地,Uri等,更重要的是他内 ...

  9. Universal-Image-Loader(UIL)图片加载框架使用简单介绍

    这个也是最近项目中使用到的第三方图片加载框架,在这里也自己总结一下,简单的介绍一些使用的方式. UIL图片加载框架特点 简介: 项目地址:https://github.com/nostra13/And ...

最新文章

  1. Windows如何 cmd 查找文件路径 开机启动 CMD语音播放 CMD切换到管理员!
  2. 字母s开头的c语言的工具,C语言库函数(S类字母) - 3
  3. Day 5: GruntJS——重复乏味的工作总会有人做(反正我不做)
  4. 栈的应用实例——计算后缀表达式
  5. 动态规划/贪心 - 无重叠区间
  6. 如何关闭Windows7的UAC
  7. org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved
  8. .net实现URL重写
  9. Hibernate 对c3p0配置不支持导致的错误
  10. MySQL的position值是什么_MySQL数据库中系统函数POSITION功能简介
  11. scrapy_全站爬取
  12. java父类与子类的构造方法,java父类子类构造方法及方法的调用
  13. w10 桌面计算机垃圾桶,win10垃圾桶图标不见了怎么办
  14. Java中this关键字的作用和用法
  15. Android开发:ZXing条码扫描-竖屏解决方案
  16. 使用python包scanpy读取单细胞h5ad文件
  17. 万彩办公大师OfficeBox3.1.0(小小工具箱几乎满足各种办公需求)
  18. ios安卓模拟器_iOS模拟器来了?苹果大一统时代会对游戏行业造成哪些冲击?
  19. oracle提示符sqlprompt
  20. 警惕新型钓鱼邮件诈骗~伪装的“再次发送”邮件

热门文章

  1. python hook微信_基于hook的python机器人,彻底取代itchat
  2. 微信小程序商城项目实战(第一篇:项目搭建与首页)
  3. 简单使用java程序进行数值拆分~
  4. NCD 2019 with @Zlrrr
  5. readlink 读取当前路径 linux
  6. solidity-antlr4
  7. Microphone回音问题分析
  8. 2021年了,你还不知道哪个招标网站比较好?
  9. Transformer技术在机器翻译中的应用研究
  10. SQL中with recursive用法案例详解