CírculoImagenVer
Un ImageView circular rápido perfecto para imágenes de perfil. Esto se basa en RoundedImageView de Vince Mi, que a su vez se basa en técnicas recomendadas por Romain Guy.
Utiliza un BitmapShader y no :
- crear una copia del mapa de bits original
- use un clipPath (que no está acelerado por hardware ni suavizado)
- use setXfermode para recortar el mapa de bits (lo que significa dibujar dos veces en el lienzo)
Como este es solo un ImageView personalizado y no un Drawable personalizado o una combinación de ambos, se puede usar con todo tipo de dibujables, es decir, un PicassoDrawable de Picasso u otros dibujables no estándar (aunque necesita algunas pruebas).
Gradle
dependencies {
...
implementation 'de.hdodenhof:circleimageview:3.1.0'
}
Uso
< de .hdodenhof.circleimageview.CircleImageView
xmlns : app = " http://schemas.android.com/apk/res-auto "
android : id = " @+id/profile_image "
android : layout_width = " 96dp "
android : layout_height = " 96dp "
android : src = " @drawable/profile "
app : civ_border_width = " 2dp "
app : civ_border_color = " #FF000000 " />
Limitaciones
- El ScaleType siempre es CENTER_CROP y obtendrás una excepción si intentas cambiarlo. Esto es (actualmente) por diseño, ya que está perfectamente bien para imágenes de perfil.
- No se admite la habilitación de
adjustViewBounds
ya que requiere un ScaleType no compatible - Si utiliza una biblioteca de carga de imágenes como Picasso o Glide, debe desactivar sus animaciones de desvanecimiento para evitar imágenes desordenadas. Para Picasso use la opción
noFade()
, para Glide use dontAnimate()
. Si desea conservar la animación de desvanecimiento, debe buscar la imagen en un Target
y aplicar una animación personalizada usted mismo cuando reciba el Bitmap
. - El uso de
TransitionDrawable
con CircleImageView
no funciona correctamente y genera imágenes desordenadas.
Preguntas frecuentes
¿Cómo puedo utilizar un VectorDrawable
con CircleImageView
?
Respuesta corta: no deberías. Usar un VectorDrawable
con CircleImageView
es muy ineficiente. Debes modificar tus vectores para que tengan forma circular y usarlos con un ImageView normal.
¿Por qué CircleImageView
no extiende AppCompatImageView
?
Ampliar AppCompatImageView
requeriría agregar una dependencia de tiempo de ejecución para la biblioteca de soporte sin ningún beneficio real.
¿Cómo puedo agregar un selector (por ejemplo, efecto dominó) vinculado a un círculo?
Actualmente no hay soporte directo para un selector delimitado por un círculo, pero puedes seguir estos pasos para implementarlo tú mismo.
¿Cómo puedo agregar un espacio entre la imagen y el borde?
Tampoco se admite agregar un espacio directamente, pero existe una solución alternativa.
Registro de cambios
- 3.1.0
- Alinear banderas de pintura de mapa de bits con BitmapDrawable (mejora la escala)
- 3.0.2
- Reparar NPE durante la inicialización en el nivel API <= 19
- Se corrige el contorno incorrecto que se proporciona si la transformación circular está deshabilitada
- 3.0.1
- Arreglar el evento táctil que no se activa si la vista está vacía
- Se corrige el área táctil limitada a un círculo incluso si la transformación está deshabilitada
- 3.0.0
- Limitar el manejo de eventos táctiles al área del círculo
- Migrar a AndroidX
- Eliminar propiedades y métodos obsoletos
- 2.2.0
- Agregar soporte para elevación
- Agregue el atributo de color de fondo del círculo para reemplazar el color de relleno
- 2.1.0
- Agregar soporte para relleno
- Agregar opción para deshabilitar la transformación circular.
- Se corrigió el espacio fino que se dibujaba entre la imagen y el borde en algunas condiciones.
- Se corrigió NPE al usar el atributo de tinte (que no es compatible)
- Desaprobar el color de relleno porque parece causar bastante confusión.
- 2.0.0
- ÚLTIMA HORA: Los atributos xml personalizados ahora tienen el prefijo "civ_"
- Manejo elegante de elementos dibujables incompatibles
- Agregue soporte para un color de relleno que se muestra detrás de imágenes con áreas transparentes
- Solucionar problemas de cálculo de dimensiones con imágenes pequeñas
- Arreglar el mapa de bits que no se borra cuando se establece en nulo
- 1.3.0
- Agregar setBorderColorResource(int resId)
- Agregar anotaciones de tipo de recurso
- Agregue el atributo border_overlay para permitir dibujar el borde en la parte superior de la imagen base
- 1.2.2
- Agregar compatibilidad con ColorFilter
- 1.2.1
- Se corrigió que ColorDrawables no se renderizara correctamente en Lollipop
- 1.2.0
- Agregue soporte para setImageURI (Uri uri)
- Arreglar la vista que no se inicializa cuando se usa CircleImageView (contexto contextual)
- 1.1.1
- Se corrige que se muestre el borde aunque el ancho del borde esté establecido en 0
- 1.1.0
- Agregar soporte para ColorDrawables
- Agregue captadores y definidores para el color y el ancho del borde
- 1.0.1
- Evitar fallos debido a OutOfMemoryError
- 1.0.0
Licencia
Copyright 2014 - 2020 Henning Dodenhof
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.