Fresco几处不太好的地方

原创
2016/04/18 14:42
阅读数 1.7K
  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#_


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部