文档章节

Fresco几处不太好的地方

Mstart
 Mstart
发布于 2016/04/18 14:42
字数 764
阅读 553
收藏 1
  1. Drawees 不支持 wrap_content 属性

    强制性的宽高,你必须声明 android:layout_width 和 android:layout_height。如果没有在XML中声明这两个属性,将无法正确加载图像。

wrap_content

Drawees 不支持 wrap_content 属性。

所下载的图像可能和占位图尺寸不一致,如果设置出错图或者重试图的话,这些图的尺寸也可能和所下载的图尺寸不一致。

如果大小不一致,假设使用的是 wrap_content,图像下载完之后,View将会重新layout,改变大小和位置。这将会导致界面跳跃。

固定宽高比

只有希望显示固定的宽高比时,可以使用wrap_content

如果希望图片以特定的宽高比例显示,例如 4:3,可以在XML中指定:

<com.facebook.drawee.view.SimpleDraweeView     android:id="@+id/my_image_view"     android:layout_width="20dp"     android:layout_height="wrap_content"     fresco:viewAspectRatio="1.33"     <!-- other attributes -->

也可以在代码中指定显示比例:

mSimpleDraweeView.setAspectRatio(1.33f);


不要使用 ScrollViews#

如果你想要在一个长的图片列表中滑动,你应该使用 RecyclerViewListView,或 GridView。这三者都会在你滑动时不断重用子视图。Fresco 的 view 会接收系统事件,使它们能正确管理内存。

ScrollView 不会这样做。因此,Fresco view 不会被告知它们是否在屏幕上显示,并保持图片内存占用直到你的 Fragment 或 Activity 停止。你的 App 将会面临更大的 OOM 风险。

不要向下转换

不要试图把Fresco返回的一些对象进行向下转化,这也许会带来一些对象操作上的便利,但是也许在后续的版本中,你会遇到一些因为向下转换特性丢失导致的难以处理的问题。

不要使用getTopLevelDrawable

DraweeHierarchy.getTopLevelDrawable() 仅仅 应该在DraweeViews中用,除了定义View中,其他应用代码建议连碰都不要碰这个。

在自定义View中,也千万不要将返回值向下转换,也许下个版本,我们会更改这个返回值类型。

不要复用 DraweeHierarchies

永远不要把 DraweeHierarchy 通过 DraweeView.setHierarchy 设置给不同的View。DraweeHierarchy 是由一系列 Drawable 组成的。在 Android 中, Drawable 不能被多个 View 共享。

不要在多个DraweeHierarchy中使用同一个Drawable

原因同上。当然可以使用不同的资源ID,Android 实际会创建不同的 Drawable。

不要直接控制 hierarchy

不要直接使用 SettableDraweeHierarchy 方法(resetsetImage,...)。它们应该仅由 controller 使用。

不要直接给 DraweeView 设置图片。

目前 DraweeView 直接继承于 ImageView,因此它有 setImageBitmapsetImageDrawable 等方法。

如果利用这些方法直接设置一张图片,内部的 DraweeHierarchy 就会丢失,也就无法取到image pipeline 的任何图像了。

使用 DraweeView 时,请不要使用任何 ImageView 的属性

在后续的版本中,DraweeView 会直接从 View 派生。任何属于 ImageView 但是不属于 View 的方法都会被移除。



内容来自:http://fresco-cn.org/docs/index.html#_


© 著作权归作者所有

Mstart
粉丝 10
博文 62
码字总数 17890
作品 0
南通
程序员
私信 提问
fresco完美兼容ImageView

在fresco的示例中通过SimpleDraweeView的setController方法调用启动一张图片的下载、解码、缓存、渲染和缓存生命周期管理。或许是受官方示例的影响,普遍认为fresco绑定死了它的DraweeView视...

obaniu
2017/02/16
331
0
Glide ‘优’ 与 ‘愁’

随着业务的增长,加载图片是不可避免的需求。从一开始的自己写一个 ImageLoader 到井喷似的第三方图片加载库,当然中间还时不时穿插着 asynctask ,三级缓存,LRU Cache等。那个时候想必大家...

IMSk
2018/06/20
0
0
小红书Android客户端演进之路

小红书Android客户端演进之路 码农明明桑2016-08-0863 阅读 Android架构 小红书Android客户端第一个版本于2014年8月8日发布,转眼到了2016年8月8日,小红书Android版本发版两周年。趁机回顾一...

码农明明桑
2016/08/08
0
0
从零开始撸一个Fresco之总结

Fresco是一个比较大的开源项目,类的总数超过450个。经过一个来月的翻译,终于将绝大部分Fresco的源码翻译完毕了,也写了几篇Fresco各个模块的分析博客。Fresco的源代码是一个巨大的宝库,让...

何时夕阳
2017/04/21
0
0
Android 图片展示--Facebook Fresco

Fresco 是强大的 Android 应用图片显示系统。 Fresco 关注图片的加载和显示,可以从网络,本地存储或者本地资源加载图片,显示一个占位符知道图片加载成功。Fresco 包括 2 层缓存:一个在内存...

叶秀兰
2015/07/29
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(三)——方法引用

在一起来学Java8(一)——函数式编程中有一个简单的函数式编程的例子: import java.util.function.Consumer;class Person { public static void sayHello(String name) { S...

猿敲月下码
1分钟前
0
0
读书笔记:深入理解ES6(十一)

第十一章 Promise与异步编程   Promise可以实现其他语言中类似Future和Deferred一样的功能,是另一种异步编程的选择,它既可以像事件和回调函数一样指定稍后执行的代码,也可以明确指示代码...

张森ZS
24分钟前
3
0
面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
32分钟前
20
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
37分钟前
14
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
45分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部