:最初は確かにフレスコアドレスそれであるhttps://github.com/facebook/fresco
Gradleの設定:
実装 'com.facebook.fresco:新鮮:1.13.0'
1.アプリケーションの初期化
Fresco.initialize(この);
XMLで2. SimpleDraweeView
xmlns:アプリ= "http://schemas.android.com/apk/res-auto"
<com.facebook.drawee.view.SimpleDraweeView アンドロイド:ID = "@ + ID /アバター" アンドロイド:layout_width = "60dp" アンドロイド:layout_height = "60dp" アンドロイド:layout_margin = "10dp" アンドロイド:scaleType = "fitXY" アプリ:actualImageScaleType =「fitCenter」//実際の画像再スケーリングタイプ アプリ:placeholderImage = "@ミップマップ/ ic_launcher" //プレースホルダマップ アプリ:placeholderImageScaleType =「centerInside」//プレースホルダ画像再スケーリングタイプ アプリ:progressBarImage = "@ミップマップ/ common_loading" //マップをロードします アプリ:progressBarImageScaleType =「centerInside」//ロードマップのスケーリングタイプ アプリ:progressBarAutoRotateInterval = "1000" //ロード時間 アプリ:failureImage = "@ミップマップ/ ic_launcher" //図の失敗 アプリ:failureImageScaleType =「centerInside」//がマップスケーリングタイプを失敗します アプリ:retryImage = "@ミップマップ/ ic_launcher" //しようとして再 アプリ:retryImageScaleType =「centerInside」再スケーリングタイプに//の試み アプリ:roundAsCircle = "true" を//かフィレット アプリ:フィレットのroundedCornerRadius =「30DP」//サイズ />
3.ロード画像
INT幅= SystemUtil.dp2px(コンテキスト、50)。 INT高さ= SystemUtil.dp2px(コンテキスト、50)。 ImageUtil.load((GenericDraweeView)helper.getView(R.id.avatar)、 "图片URL"、幅、高さ);
公共の静的な無効負荷(GenericDraweeView draweeView、文字列のURL、int型の幅、int型の高さ){ あなたは= ri.parseます(URL)です。 ImageRequest要求= ImageRequestBuilder.newBuilderWithSource(URI) .setResizeOptions(新しいResizeOptions(幅、高さ)) .build()。 DraweeControllerコントローラ= Fresco.newDraweeControllerBuilder() .setImageRequest(リクエスト) .setOldController(draweeView.getController()) .build()。 draweeView.setController(コントローラ) }
ポイント、SimpleDraweeViewサイズがセットでなければならないこと4.注意
アンドロイド:layout_width = "60dp" アンドロイド:layout_height = "60dp"
5.スケールタイプ-ScaleType
タイプ | 説明 |
---|---|
センター | センター、無ズーム |
centerCrop | 両側がディスプレイの境界以上であるように、アスペクト比が減少または拡大され維持されます。中心。 |
focusCrop | centerCropとではなく、中心点の中点が、指定されたポイント |
centerInside | だから、両側が境界内に表示されていること、それが中心。大きさは、図の境界線の表示よりも大きい場合、サムネイル画像のアスペクト比が維持されます。 |
fitCenter | 低減または画像が境界内に完全にディスプレイ上に表示するように拡大アスペクト比を維持します。中央揃え |
fitStart | 同上。しかし、中心とディスプレイの左上境界に整列していません |
キーボード | fitCenterではなく、中心、および右下のディスプレイの境界整列 |
fitXY | ディスプレイの境界線を埋め、アスペクト比を保存しないでください |
なし | 使用タイルモード表示には、noneに設定する必要があります |
推奨使用:focusCropタイプフレスコ中国はこの点を説明する内容があります
6.まとめ
要約:
XML属性 | 意味 |
---|---|
fadeDuration | アニメーションのフェード時間(単位:ミリ秒ミリ秒) |
actualImageScaleType | ズーム画像の実際の型 |
placeholderImage | 図プレースホルダ |
placeholderImageScaleType | ズームマップタイプのプレースホルダ |
progressBarImage | プログレスチャート |
progressBarImageScaleType | 日程計画のズームタイプ |
progressBarAutoRotateInterval | 図自動ローテーションスケジュール間隔(単位:ミリ秒) |
failureImage | 図の失敗 |
failureImageScaleType | 故障マップのズームタイプ |
retryImage | しようとして再 |
retryImageScaleType | 再スケーリングタイプしようとしています |
backgroundImageの | 背景 |
overlayImage | オーバーレイ |
pressedStateOverlayImage | 押された状態に示されているオーバーレイ |
roundAsCircle | 図は、円形に配置されました |
roundedCornerRadius | 半径 |
roundTopLeft | 左上隅を丸くするかどうか |
roundTopRight | 右上フィレットかどうか |
roundBottomLeft | 左下隅を丸くするかどうか |
roundBottomRight | 右下の角が丸みを帯びているかどうかを |
roundingBorderWidth | 図の円形または丸い境界線の幅。 |
roundingBorderColor | 図色円形または丸い境界 |
roundWithOverlayColor | 図円形または丸い底オーバーレイ色(色のみ設定することができます) |
viewAspectRatio | 制御アスペクト比 |
Fresco缓存也是一大亮点, 三级缓存,分别是 Bitmap缓存,未解码图片缓存, 文件缓存。
这里提一点Bitmap缓存:在5.0以下系统,Bitmap缓存位于ashmem,这样Bitmap对象的创建和释放将不会引发GC,更少的GC会使你的APP运行得更加流畅。5.0及其以上系统,相比之下,内存管理有了很大改进,所以Bitmap缓存直接位于Java的heap上。
另外,磁盘缓存还可以通过代码来设置不同手机的缓存容量:
public void initFresco(Context context, String diskCacheUniqueName){
DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder(context)
.setMaxCacheSize(DISK_CACHE_SIZE_HIGH)
.setMaxCacheSizeOnLowDiskSpace(DISK_CACHE_SIZE_LOW)
.setMaxCacheSizeOnVeryLowDiskSpace(DISK_CACHE_SIZE_VERY_LOW)
.build();
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
.setMainDiskCacheConfig(diskCacheConfig)
.build();
Fresco.initialize(context, config);
}
Glide缓存(比较,有兴趣的人也可以使用这个,个人认为对于目前手机内存来说Fresco更合适)
Glide虽然只有内存和磁盘缓存,在性能上比不上Fresco;但他也有另外的优点, Fresco缓存的时候,只会缓存原始图像,而Glide则会根据ImageView控件尺寸获得对应的大小的bitmap来展示,从而缓存也可以针对不同的对象:原始图像(source),结果图像(result); 可以通过.diskCacheStrategy()方法设置