Drawees 不支持 wrap_content
属性
强制性的宽高,你必须声明 android:layout_width
和 android:layout_height
。如果没有在XML中声明这两个属性,将无法正确加载图像。
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);
如果你想要在一个长的图片列表中滑动,你应该使用 RecyclerView
,ListView
,或 GridView
。这三者都会在你滑动时不断重用子视图。Fresco 的 view 会接收系统事件,使它们能正确管理内存。
ScrollView
不会这样做。因此,Fresco view 不会被告知它们是否在屏幕上显示,并保持图片内存占用直到你的 Fragment 或 Activity 停止。你的 App 将会面临更大的 OOM 风险。
不要试图把Fresco返回的一些对象进行向下转化,这也许会带来一些对象操作上的便利,但是也许在后续的版本中,你会遇到一些因为向下转换特性丢失导致的难以处理的问题。
DraweeHierarchy.getTopLevelDrawable()
仅仅 应该在DraweeViews中用,除了定义View中,其他应用代码建议连碰都不要碰这个。
在自定义View中,也千万不要将返回值向下转换,也许下个版本,我们会更改这个返回值类型。
永远不要把 DraweeHierarchy
通过 DraweeView.setHierarchy
设置给不同的View。DraweeHierarchy 是由一系列 Drawable 组成的。在 Android 中, Drawable 不能被多个 View 共享。
原因同上。当然可以使用不同的资源ID,Android 实际会创建不同的 Drawable。
不要直接使用 SettableDraweeHierarchy
方法(reset
,setImage
,...)。它们应该仅由 controller 使用。
DraweeView
设置图片。目前 DraweeView
直接继承于 ImageView,因此它有 setImageBitmap
, setImageDrawable
等方法。
如果利用这些方法直接设置一张图片,内部的 DraweeHierarchy
就会丢失,也就无法取到image pipeline 的任何图像了。
在后续的版本中,DraweeView 会直接从 View 派生。任何属于 ImageView 但是不属于 View 的方法都会被移除。
内容来自:http://fresco-cn.org/docs/index.html#_