android中的imageview和com.facebook.drawee.view.SimpleDraweeView之间的区别

时间:2016-02-09 10:24:58

标签: imageview fresco

有人可以解释一下ImageView和com.facebook.drawee.view.SimpleDraweeView之间的真正区别,以及为什么壁画不使用imageview。

我们可以通过壁画在服务器上上传图片吗?如果是,请分享代码..

3 个答案:

答案 0 :(得分:2)

与讨论这些类之间“更深层”差异的Codo's answer不同(请参阅图像管道部分here),我将讨论可用性差异。

查看SimpleDraweeView public class SimpleDraweeView extends GenericDraweeView public class GenericDraweeView extends DraweeView<GenericDraweeHierarchy> public class DraweeView<DH extends DraweeHierarchy> extends ImageView 及相关类,可以看到以下继承层次结构:

DraweeView

以下说明出现在ImageView的类定义之前:

  

虽然View是子类,而不是直接子类化ImageView,但此类不支持setImageXxx的{​​{1}},setScaleType和类似的方法。扩展ImageView是一个短期解决方案,以便继承它的一些实现(填充计算等)。   此类可能会在将来直接转换为扩展View,因此请避免使用ImageView的方法和属性(T5856175)。

所以我们知道DraweeView 目前继承自ImageView - 这通常意味着“它会做所有事情ImageView做得更多”(讨论的例外情况)在上面的评论栏中)。这种简单的方法可以为您提供一个总体思路,但忽略了与Fresco兼容的最重要方面。

the source code解释了如何使用drawees,您可以从他们的XML定义中看到它们可以更加自定义Fresco docs

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="20dp"
    fresco:fadeDuration="300"
    fresco:actualImageScaleType="focusCrop"
    fresco:placeholderImage="@color/wait_color"
    fresco:placeholderImageScaleType="fitCenter"
    fresco:failureImage="@drawable/error"
    fresco:failureImageScaleType="centerInside"
    fresco:retryImage="@drawable/retrying"
    fresco:retryImageScaleType="centerCrop"
    fresco:progressBarImage="@drawable/progress_bar"
    fresco:progressBarImageScaleType="centerInside"
    fresco:progressBarAutoRotateInterval="1000"
    fresco:backgroundImage="@color/blue"
    fresco:overlayImage="@drawable/watermark"
    fresco:pressedStateOverlayImage="@color/red"
    fresco:roundAsCircle="false"
    fresco:roundedCornerRadius="1dp"
    fresco:roundTopLeft="true"
    fresco:roundTopRight="false"
    fresco:roundBottomLeft="false"
    fresco:roundBottomRight="true"
    fresco:roundWithOverlayColor="@color/corner_color"
    fresco:roundingBorderWidth="2dp"
    fresco:roundingBorderColor="@color/border_color"
  />

至于上传 - 似乎Fresco仅用于下载图片。您可能需要查看than ImageView / Robospice以了解上传需求。

答案 1 :(得分:0)

Facebook提供了自己的ImageView,因此您可以使用自己的View而不是创建自己的CustomView或ImageView。

但是,请记住,与您自己的自定义视图相比,您可以减少对它的控制。

这为您提供了按钮查看或类似内容的完整包和功能。

像这里的ImageView

的圆角
       <de.hdodenhof.circleimageview.CircleImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/userImage"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp" />

答案 2 :(得分:0)

Android 5之前的Android版本在处理大量图片时存在严重问题。 Android 2在Java堆上存在问题,如果不破坏活动,Android 4就无法正常释放它们。

因此Fresco将图像移动到本机堆(Android 2)并为Android 4实现自己的引用计数,以便知道图像何时不再被引用并且可以被回收。

他们将ImageView替换为SimpleDrawView,以便完全控制对图片的引用。实际上,只有低级API才能让您直接访问图像。否则他们使用引用计数的方法就可以了。