有人可以解释一下ImageView和com.facebook.drawee.view.SimpleDraweeView之间的真正区别,以及为什么壁画不使用imageview。
我们可以通过壁画在服务器上上传图片吗?如果是,请分享代码..
答案 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才能让您直接访问图像。否则他们使用引用计数的方法就可以了。