La primera es sin duda la dirección que Fresco: https://github.com/facebook/fresco
configuración Gradle:
aplicación 'com.facebook.fresco: fresco: 1.13.0'
1. Aplicación de inicialización
Fresco.initialize (this);
2. Uso SimpleDraweeView en XML
xmlns: app = "http://schemas.android.com/apk/res-auto"
<Com.facebook.drawee.view.SimpleDraweeView Android: ID = "@ + ID / Avatar" Android: layout_width = "60dp" Android: layout_height = "60dp" Android: layout_margin = "10DP" Android: la ScaleType = "fitXY" App : actualImageScaleType = "fitCenter" // imagen real re-escalamiento tipo de aplicación: placeholderImage = "@ mipmap / ic_launcher" // mapa marcador de posición aplicación: placeholderImageScaleType = "centerInside" // marcador de posición tipo de imagen re-escalado de aplicación: progressBarImage = "@ mipmap / common_loading "// figura carga aplicación: progressBarImageScaleType =" centerInside "// escala tipo de carga figura aplicación: progressBarAutoRotateInterval =" 1000 "// carga del tiempo de aplicación: failureImage =" @ mipmap / ic_launcher "// Figura fracaso aplicación: failureImageScaleType = "centerInside" // falla mapa tipo de escala aplicación: retryImage = "@ mipmap / ic_launcher" // re tratando aplicación: retryImageScaleType = "centerInside" // intento de tipo reescalamiento aplicación: roundAsCircle = "true" // si redondeada aplicación: roundedCornerRadius = "30DP" // ronda ángulo tamaño />
3. Cargar foto
int width = SystemUtil.dp2px (contexto, 50); int height = SystemUtil.dp2px (contexto, 50); ImageUtil.load ((GenericDraweeView) helper.getView (R.id.avatar), "图片url", anchura, altura);
public static carga void (GenericDraweeView draweeView, String url, ancho int, int altura) { Uri uri = Uri.parse (url); Solicitud ImageRequest = ImageRequestBuilder.newBuilderWithSource (URI) .setResizeOptions (nuevos ResizeOptions (anchura, altura)) .build (); DraweeController controlador = Fresco.newDraweeControllerBuilder () .setImageRequest (petición) .setOldController (draweeView.getController ()) .build (); draweeView.setController (controlador); }
4. Tenga en cuenta ese punto, el tamaño debe ser conjunto SimpleDraweeView
Android: layout_width = "60dp" android: layout_height = "60dp"
5. Escala tipo -ScaleType
tipo | descripción |
---|---|
centrar | Centro, sin zoom |
centerCrop | El mantenimiento de la relación de aspecto de reducirse o aumentarse, de manera que ambos lados son iguales a o mayor que los límites de visualización. Centrada. |
focusCrop | Con centerCrop, pero no punto medio del punto central, sino un punto especificado |
centerInside | Por lo que ambas partes se muestran dentro de los límites, se centra. Si el tamaño es más grande que la pantalla de la figura límite, se mantiene miniatura relación de aspecto de imagen. |
fitCenter | El mantenimiento de la relación de aspecto, reduce o se amplía de modo que la imagen que aparece en la pantalla por completo dentro de la frontera. centrado |
fitStart | Ibid. Pero no está centrado y alineado con el límite superior izquierda de la pantalla |
teclados | Con fitCenter, pero no centrada, y con la alineación límite inferior derecha de la pantalla |
fitXY | No guardar la relación de aspecto, llenando el borde de la pantalla |
ninguna | Para uso de la exhibición modo de mosaicos, se debe establecer a ninguno |
Uso recomendado: Tipo focusCrop Fresco chino explicar este punto hay detalles
6. Resumen
resumen:
atributos XML | significado |
---|---|
fadeDuration | duración del desvanecimiento de la animación (Unidad: ms milisegundos) |
actualImageScaleType | El tipo real de la imagen de zoom |
placeholderImage | Figura marcador de posición |
placeholderImageScaleType | Zoom tipo Mapa de marcador de posición |
progressBarImage | tabla de progreso |
progressBarImageScaleType | zumbido tipo de plan de horario |
progressBarAutoRotateInterval | La figura rotación automática intervalo de programación (unidad: ms ms) |
failureImage | Figura fracaso |
failureImageScaleType | Tipo de zoom del mapa fracaso |
retryImage | Re tratando de |
retryImageScaleType | Tratando de re-escalamiento tipo |
imagen de fondo | fondo |
overlayImage | superposición |
pressedStateOverlayImage | Superposición se muestra en el estado de prensado |
roundAsCircle | La figura dispuesta circular |
roundedCornerRadius | radio |
roundTopLeft | Si la esquina superior izquierda redondeada |
roundTopRight | Si el filete de la esquina superior derecha |
roundBottomLeft | Si la esquina inferior izquierda redondeado |
roundBottomRight | Si la esquina inferior derecha es redondeada |
roundingBorderWidth | ancho del borde circular o redondeada de la figura. |
roundingBorderColor | de color figura fronteras circulares o redondeadas |
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()方法设置