simplemente escribí un artículo para esto. Desea poder responder su pregunta.
https://plus.google.com/112740367348600290235/posts/VNAfFLDcKrw
ImageView
tiene 4 API para especificar la imagen. ¿Cuál usar? ¿Cuál es la diferencia?
- setImageDrawable (dibujable Disponibles)
- setImageBitmap (Bitmap bm)
- setImageResource (int Resid)
- setImageURI (URI uri)
ImageView
, por el nombre, se utiliza para mostrar una imagen. Pero, ¿qué es una imagen? Una Bitmap
es una imagen, no es difícil de entender y usamos setImageBitmap
para tal fin. Sin embargo, internamente, el ImageView
tiene-un Drawable
pero no un Bitmap
y para eso es setImageDrawable
. Cuando llame al setImageBitmap
, internamente, el mapa de bits se ajustará al BitmapDrawable
, que es IS-A Drawable
, y luego llamará al setImageDrawable
.
Aquí está el código.
public void setImageBitmap(Bitmap bm) {
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
Entonces, ¿qué pasa con el 3 y 4 API?
Ya debe saber que hay muchos modos de crear un mapa de bits: desde una ruta de archivo, desde una secuencia de entrada, desde el Uri, o desde el archivo de recursos.
BitmapFactory.decodeFile(String pathName)
BitmapFactory.decodeStream(Inputstream)
BitmapFactory.decodeResource(Resource res, int id)
BitmapFactory.decodeByteArray(byte[] data)
Consciente de ello, es fácil de entender setImageResource
/setImageUri
es simplemente igual que setImageBitmap
.
En resumen, setImageDrawable
es la función primitiva de la que dependen otras API. Los otros 3 son solo métodos auxiliares que te hacen escribir menos código.
Además, es muy importante tener en cuenta que ImageView
realmente tiene un Drawable
, que no necesariamente es un BitmapDrawable
! Puede configurar Drawable
en la vista de Imagen.
Además de configurar el Drawable
a través de la API de Java, también puede usar la atribución de XML para establecer la fuente Drawable
para ImageView
. Vea el ejemplo a continuación. Tenga en cuenta que la forma puede ser un archivo de imagen (.png, .jpg, .bmp) o un archivo xml.
Creo que no hay diferencia en estos dos ejemplos concretos –