当前位置: 移动技术网 > IT编程>移动开发>Android > Android使用开源框架Fresco处理图片

Android使用开源框架Fresco处理图片

2019年07月24日  | 移动技术网IT编程  | 我要评论

魔藤碎片,战鼓传说官网,社工研究组

关于fresco的优点大家自行谷歌吧,它太强大太优秀了,我这一片小博文容纳不下啊羡慕,今天主要给大家简单介绍下fresco的使用以及一些属性的介绍。

 fresco是一个强大的图片加载组件。使用它之后,你不需要再去关心图片的加载和显示这些繁琐的事情!支持android2.3及以后的版本。

官网详细介绍了fresco一些特性,我第一次看确实是惊呆了。

2016年fresco的最新的源码分析:https://github.com/desmond1121/fresco-source-analysis

简述与其他常用图片缓存框架的比较

(1)volley提供了一个新的控件networkimageview来代替传统的imageview如果你的工程项目,是一个比较小的项目,或者要求不是很高的项目,处理比较简单的可以使用这个库,这个库是google 2013 i/o发布的一个开源库。使用这个库在图片的处理上,没有提供任何的图片处理的操作,用于细粒度的数据连接还是可以的。

(2)universal-image-loader是比较早的一个图片缓存组件,也一直受到开发者的推崇,在很多老的应用中使用。

(3)picasso与glide,无疑glide胜出

(4)而fresco作为新秀,不管从内存管理(三级缓存),图片的渐进式呈现,gif图和webp格式图像的加载,都是非常突出。(也是我最喜欢用的)

涉及的常用基本属性介绍

(1)layout_width和layout_height不支持warp_content但是可以通过setaspectretio();来设置宽高比

(2)fadeduration()淡出时间;

(3)actualimagescaletype 设置图片缩放,通常使用foucscrop,该属性值会通过算法把人头像放在中间

(4)placeholderimage下载成功之前显示的图片placeholderimagescaletype

(5)failureimage加载失败时显示的图片faiturelmagescatetype

(6)retrylmage加载失败,提示用户点击重新加载的图片retrylmagescatetype

(7)progressbarimage提示用户正在加载,和进度无关progressbarlmagescatetype

(8)progressbarautorotateinterval图片自动旋转的时间间隔

(9)backgroundimage背景

(10)overlayimage叠加图

(11)pressedstateoverlayimage按下时候的叠加图

(12)roundascircle是否涉及圆圈

(13)roundedcornerradius圆角

(14)roundtopleft、roundtopright…..分别设置4个角不同半径,设置为true以后可以在代码中通过roundingparams的setconnersradii()方法设置角度。

(15)roundwithoverlaycolor边框的叠加颜色

(16)roundingborderwidth边框宽度

(17)roundingbordercolor边框颜色

下面我们简单演示使用fresco加载网络图片的流程:
演示效果如下(你们猜对了,又是本人的玉照安静):

第一步:导依赖包

与之前的android-image-indicator-master项目相同,本次依然使用androidstudio2.2。仍然采用在build.gradle下中dependencies下直接添加如下代码:

compile 'com.facebook.fresco:fresco:0.12.0'

同时可以根据个人项目需求添加如下依赖:

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'
}

第二步:添加网络权限

因为是加载网络图片所以必须在 androidmanifest.xml配置文件中添加网络权限:

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

第三步:初始化fresco类

在加载图片之前,你必须初始化fresco类。你只需要调用fresco.initialize一次即可完成初始化,下面分别介绍在mainactivity与application中调用初始化方法

(1)在application调用初始化(建议使用)

[myapplication.java]
public class myapplication extends application {
  @override
  public void oncreate() {
    super.oncreate();
    fresco.initialize(this);
  }
}

做完上面的工作后,需要在 androidmanifest.xml 中指定 application 类。

(2)在mainactivity中调用初始化

需要注意的是要在setcontentview之前初始化

package com.mly.panhouye.frescodemo;
import android.os.bundle;
import android.support.v7.app.appcompatactivity;
import com.facebook.drawee.backends.pipeline.fresco;
public class mainactivity extends appcompatactivity {
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    fresco.initialize(this);//需要在setcontentview之前初始化
    setcontentview(r.layout.activity_main);
  }
}

第四步:layout中的xml布局文件

在布局之前需要在xml文件中加入命名空间

xmlns:fresco="http://schemas.android.com/apk/res-auto"

具体布局文件如下,本次演示通过按钮点击出发图片加载,使用simpledraweeview(注意:layout_width/height不支持wrap_content):

<?xml version="1.0" encoding="utf-8"?>
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  xmlns:fresco="http://schemas.android.com/apk/res-auto"
  android:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="com.mly.panhouye.frescodemo.mainactivity">
  <button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/my_image_view"
    android:layout_centerhorizontal="true"
    android:text="加载网络图片"
    android:onclick="loadinternetimage"
    android:layout_margintop="12dp"
    android:id="@+id/button" />
  <com.facebook.drawee.view.simpledraweeview
    android:id="@+id/my_image_view"
    android:layout_width="400dp"
    android:layout_height="400dp"
    fresco:placeholderimage="@mipmap/ic_launcher"
    android:layout_alignparenttop="true"
    android:layout_centerhorizontal="true" />
</relativelayout>

第五步:java实现代码

package com.mly.panhouye.frescodemo;
import android.net.uri;
import android.os.bundle;
import android.support.v7.app.appcompatactivity;
import android.view.view;
import com.facebook.drawee.backends.pipeline.fresco;
import com.facebook.drawee.view.simpledraweeview;
public class mainactivity extends appcompatactivity {
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    fresco.initialize(this);//需要在setcontentview之前初始化
    setcontentview(r.layout.activity_main);
  }
  //点击事件加载网络图片代码
  public void loadinternetimage(view view){
    uri uri = uri.parse("http://r.photo.store.qq.com/psb?/v12kkhqd1cwrd4/meykwt0nxu0stibfzf378d7ajksdet6k1.vaqmq2vps!/r/dkmaaaaaaaaa");
    simpledraweeview draweeview = (simpledraweeview) findviewbyid(r.id.my_image_view);
    draweeview.setimageuri(uri);
  }
}

剩下的,fresco会替你完成,比如:显示占位图直到加载完成;下载图片;缓存图片;图片不再显示时,从内存中移除等等等等。

 本文仅仅介绍了fresco最基本的使用方法,大家伙可以访问官网来尝试其他功能实现。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网