2016-02-09 5 views
1

Может кто-нибудь объяснить реальную разницу между ImageView и com.facebook.drawee.view.SimpleDraweeView.and почему фреска не использует imageview.?Разница между imageview и com.facebook.drawee.view.SimpleDraweeView в android

можно загрузить изображение на сервер через фрескую? если да, пожалуйста, поделитесь кодом.

ответ

0

В facebook представлен собственный ImageView, поэтому вместо создания собственного CustomView или ImageView вы можете использовать их View.

Но, помните, что у вас может быть меньше контроля над ним по сравнению с вашим собственным пользовательским представлением.

Это дает вам полный пакет и функциональность для Баттона, Посмотреть или что-нибудь подобное.

Как это здесь закругленные углы 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" /> 
+0

thnanx для ответа ... –

0

Android версии до Android 5 имеют серьезные проблемы с обработкой большого количества изображений. Android 2 имеет проблемы, если они находятся на куче Java, и Android 4 не выпускает их должным образом, если вы не уничтожаете активность.

Итак, Fresco перемещает изображения в родную кучу (Android 2) и реализует свой собственный счетчик ссылок для Android 4, чтобы узнать, когда изображение больше не ссылается и может быть переработано.

Они заменяют ImageView на SimpleDrawView, чтобы иметь полный контроль над ссылками на изображения. Фактически, только там API низкого уровня дает вам прямой доступ к изображению вообще. В противном случае их подход с подсчетом ссылок будет работать.

+0

thanx для ответа –

2

В отличие от Codo's answer, что обсуждается «глубже» различие между этими классами (см трубопровода изображения раздел here), я буду обсуждать разницу юзабилити.


Перебирая the source code из SimpleDraweeView и смежных классов можно увидеть следующую иерархию наследования:

public class SimpleDraweeView extends GenericDraweeView 
public class GenericDraweeView extends DraweeView<GenericDraweeHierarchy> 
public class DraweeView<DH extends DraweeHierarchy> extends ImageView 

Следующее описание появляется перед определением класса из DraweeView:

Хотя ImageView является подклассы вместо подкласса View напрямую, этот класс не поддерживает ImageViewsetImageXxx, setScaleType и аналогичные методы. Расширение ImageView - это краткосрочное решение, чтобы наследовать часть его реализации (расчет дополнений и т. Д.). Этот класс, скорее всего, будет преобразован в расширение View непосредственно в будущем, поэтому избегайте использования методов и свойств (T5856175).

Итак, мы знаем, что DraweeViewв наше время наследует от ImageView - которые, как правило, означает, что «он делает все ImageView делает и более» (за исключением рассмотренных в замечании блоке выше). Этот упрощенный подход может дать вам общую идею, но игнорирует самый важный аспект совместимости с Fresco.

Fresco docs объяснить, как использовать drawees, и вы можете увидеть прямо из их определений XML, что они гораздо более настраиваемый than ImageView:

<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" 
    /> 

Что касается добавления - похоже Фреско предназначена только для скачивания изображений. Вы можете посмотреть Robospice/Retrofit для ваших загрузок.

Смежные вопросы