3

ImageView と com.facebook.drawee.view.SimpleDraweeView. の本当の違いと、フレスコ画が imageview を使用しない理由を誰か説明してもらえますか?

fresco を介してサーバーに画像をアップロードできますか? はいの場合は、コードを共有してください..

4

3 に答える 3

2

これらのクラス間の「より深い」違いについて説明しているCodo の回答とは異なり(こちらのイメージ パイプラインのセクションを参照)、使いやすさの違いについて説明します。


および関連するクラスのソース コードSimpleDraweeView調べると、次の継承階層が表示されます。

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

次の説明は、 のクラス定義の前に表示されますDraweeView

ImageViewは直接サブクラス化するのではなくサブクラス化されていますが、このクラスはや類似のメソッドをViewサポートしていません。拡張は、その実装の一部 (パディング計算など) を継承するための短期的なソリューションです。このクラスは、将来、直接拡張するように変換される可能性があるため、のメソッドとプロパティを使用しないでください (T5856175)。ImageViewsetImageXxxsetScaleTypeImageViewViewImageView

これは通常、「すべてを実行し、さらに多くのことをDraweeView 実行ImageViewする」ことを意味しますImageView(上記のコメント ブロックで説明した例外を除きます)。この単純化されたアプローチは、一般的なアイデアを提供できますが、Fresco との互換性の最も重要な側面を無視しています。

Frescoのドキュメントでは、名宛人を使用する方法が説明されています。XML 定義から、名宛人の方がはるか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"
  />

アップロードに関しては、Fresco は画像のダウンロードのみを目的としているようです。アップロードのニーズについては、Robospice / Retrofitを調べることをお勧めします。

于 2016-02-09T10:58:18.893 に答える
0

Android 5 より前のバージョンの Android では、大量の画像を処理する際に深刻な問題が発生します。Android 2 では Java ヒープ上にあると問題が発生し、Android 4 ではアクティビティを破棄しないと適切に解放されません。

そのため、Fresco はイメージをネイティブ ヒープ (Android 2) に移動し、Android 4 用に独自の参照カウントを実装して、イメージがいつ参照されなくなり、再利用できるようになったかを認識します。

画像への参照を完全に制御するために、にImageView置き換えます。SimpleDrawView実際、画像に直接アクセスできるのは低レベルの API だけです。そうでなければ、参照カウントを使用したアプローチが機能します。

于 2016-02-09T10:35:05.980 に答える
0

Facebook は独自の ImageView を提供しているため、独自の CustomView または ImageView を作成するのではなく、それらの View を使用できます。

ただし、独自のカスタム ビューと比較して、制御が少ない可能性があることに注意してください。

これにより、 ButtonViewなどの完全なパッケージと機能が提供されます。

の丸みを帯びた角については、このように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" />
于 2016-02-09T10:30:20.540 に答える