初识Facebook的强大Android图片加载的框架:Fresco

简介:

Fresco是facebook推出的一款强大的图片加载的框架,这个框架出来一段时间了,前一段时间使用过了ImageLoader的框架,生命在于折腾,今天就来折腾一下Fresco这个强大的框架。

1.配置环境

由于我用的是android studio所以这里就只是说一下android studio下如何配置,在强大的gradle,只需要一句话搞定,gradle会帮你下载这个Fresco框架,gradle真好,可以自动维护你项目中的框架

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

2.开始使用Fresco

因为我这里加载的是一张网络图片,所以要获得网络权限

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

初始化Fresco,如果项目中多处用到Fresco,就直接在application中初始化,如果我只是写着玩玩,直接放在activity中的setContentView()的前面就ok了

Fresco.initialize(context);

用人家的框架就要按照人家的要求来是不,所以控件名字,命名空间都要听人家的


 
 
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     xmlns:fresco="http://schemas.android.com/apk/res-auto" 
  3.     android:layout_width="match_parent" 
  4.     android:layout_height="match_parent"> 
  5.  
  6.     <com.facebook.drawee.view.SimpleDraweeView 
  7.         android:id="@+id/image_view" 
  8.         android:layout_width="300dp" 
  9.         android:layout_height="300dp" 
  10.         fresco:placeholderImage="@mipmap/ic_launcher"/> 
  11.  
  12. </LinearLayout> 

当然你也可以不写它的命名空间,用里面的属性的时候加上去,不用就别给自己找麻烦了,直接干掉给控件uri就ok了

Uri uri = Uri.parse("http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg");
        imageView.setImageURI(uri);

ok,剩下的图片下载,缓存,图片移除就交给Fresco了,是不是很强大,但这里有一个问题,你的控件的大小必须确定,不能想以前直接使用wrap_content,当然你也可以设置宽高中的一个值,但是要设定宽高比

imageView.setAspectRatio(1.0f);

当然上面说到它强大了,强大就不止只是加载网络图片吧,它本身也支持本地,Content Provider,asset,res的图片

本地:file:// Content provider:content://  asset:  asset://  res: res://,就是让你拼一个uri

当然上面提到的SimpleDraweeView只是Drawee其中的控件,没有什么很特别的需求使用它就够了,下面贴一下它里面的一些属性,方便食用的时候查找


 
 
  1. <com.facebook.drawee.view.SimpleDraweeView 
  2.     android:id="@+id/image_view" 
  3.     android:layout_width="300dp" 
  4.     android:layout_height="300dp" 
  5.     fresco:fadeDuration="300" 
  6.     fresco:actualImageScaleType="focusCrop" 
  7.     fresco:placeholderImage="@color/wait_color" 
  8.     fresco:placeholderImageScaleType="fitCenter" 
  9.     fresco:failureImage="@drawable/error" 
  10.     fresco:failureImageScaleType="centerInside" 
  11.     fresco:retryImage="@drawable/retrying" 
  12.     fresco:retryImageScaleType="centerCrop" 
  13.     fresco:progressBarImage="@drawable/progress_bar" 
  14.     fresco:progressBarImageScaleType="centerInside" 
  15.     fresco:progressBarAutoRotateInterval="1000" 
  16.     fresco:backgroundImage="@color/blue" 
  17.     fresco:overlayImage="@drawable/watermark" 
  18.     fresco:pressedStateOverlayImage="@color/red" 
  19.     fresco:roundAsCircle="false" 
  20.     fresco:roundedCornerRadius="1dp" 
  21.     fresco:roundTopLeft="true" 
  22.     fresco:roundTopRight="false" 
  23.     fresco:roundBottomLeft="false" 
  24.     fresco:roundBottomRight="true" 
  25.     fresco:roundWithOverlayColor="@color/corner_color" 
  26.     fresco:roundingBorderWidth="2dp" 
  27.     fresco:roundingBorderColor="@color/border_color" 
  28.   /> 

简单介绍一下上面的属性:

placeholderImage就是所谓的展位图啦,在图片没有加载出来之前你看到的就是它

failureIamge看到名字就知道是什么了,图片加载失败时显示的图片就是它了

retryImage图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片

progressBarImage进度条图片

backgroundImage背景图片,这里的背景图片首先被绘制

overlayImage设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦

pressedStateOverlayImage设置点击状态下的叠加图,此叠加图不能缩放

ImageScaleType这个就是各种各样的图片缩放样式了,center,centerCrop,fouseCrop,centerInside,fitCenter,fitStart,fitEnd,fitXY

剩下的就是对圆角的处理了…


来源:51CTO

相关文章
|
3月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
17天前
|
算法 JavaScript Android开发
|
27天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
97 1
|
2月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
66 20
Android经典面试题之图片Bitmap怎么做优化
|
2月前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
358 3
|
2月前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
77 8
|
3月前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
如何使用Amlogic T972安卓9.0系统上的misc框架来简化驱动程序开发,通过misc框架自动分配设备号并创建设备文件,从而减少代码量并避免设备号冲突。
46 0
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
|
3月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
3月前
|
存储 前端开发 Java
Android MVVM框架详解与应用
在Android开发中,随着应用复杂度的增加,如何有效地组织和管理代码成为了一个重要的问题。MVVM(Model-View-ViewModel)架构模式因其清晰的结构和高效的开发效率,逐渐成为Android开发者们青睐的架构模式之一。本文将详细介绍Android MVVM框架的基本概念、优势、实现流程以及一个实际案例。
106 0