from - Android-ImageView: setImageBitmap VS setImageDrawable
imageview android studio set image (5)
Ambos métodos son válidos y logran el mismo resultado. En el primer método, ajusta su mapa de bits alrededor de un objeto dibujable que es una abstracción de todo lo que se puede dibujar en una Vista.
Lo especial de Drawables es que te permiten realizar todo tipo de operaciones en el objeto gráfico que envuelven (escalado, traducción, opacidad, etc.).
Un mapa de bits es un tipo de dibujable, puede obtener más información acerca de los dibujables aquí: http://developer.android.com/guide/topics/resources/drawable-resource.html
En el segundo método, accede directamente a los bits del mapa de bits sin operaciones relacionadas dibujables y simplemente dibuja el mapa de bits tal como está en su vista.
Espero que esto ayude, aplausos, Max.
¿Cuál es la diferencia entre setImageBitmap
y setImageDrawable
?
Tengo una imagen que me gustaría establecer dinámicamente desde el archivo. El tutorial que seguí dice que convierta mi Bitmap
en un BitmapDrawable
luego lo configure usando setImageDrawable
. Me he dado cuenta de que configurar el Bitmap
directamente con setImageBitmap
también funciona, pero no noto ninguna diferencia.
Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
BitmapDrawable bitmapDrawable = new BitmapDrawable(image);
imageView.setImageDrawable(bitmapDrawable);
O
Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
imageView.setImageBitmap(image);
En realidad, puede ver la diferencia, si a veces usa null
como argumento:
imageView.setImageDrawable(null);
Drawable d = imageView.getDrawable(); // d == null
imageView.setImageBitmap(null);
Drawable d = imageView.getDrawable(); // d == some BitmapDrawable, != null
así que si está comprobando la existencia de un drawable en ImageView
, tenga cuidado.
public void setImageBitmap(Bitmap bm) {
// if this is used frequently, may handle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
tal vez la diferencia es el mContext.getResources (), de mContext.getResources () puede obtener la densidad del divice, por lo que la pantalla en sceen es diferente
No hay diferencia entre los dos conjuntos internos que setImageBitmap
llama a setImageDrawable
.
El siguiente código se toma de ImageView.java de AOSP
public void setImageBitmap(Bitmap bm) {
// if this is used frequently, may handle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
Acabo de escribir 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 (Drawable Drawable)
- setImageBitmap (Bitmap bm)
- setImageResource (int resId)
- setImageURI (uri de URI)
ImageView
, por su nombre, se usa para mostrar una imagen. Pero, ¿qué es una imagen? Un Bitmap
es una imagen, no es difícil de entender y usamos setImageBitmap
para ese propósito. Sin embargo, internamente, ImageView
tiene un Drawable
pero no un Bitmap
y para eso es setImageDrawable
. Cuando llama a setImageBitmap
, internamente, primero el mapa de bits se BitmapDrawable
a BitmapDrawable
, que IS-A Drawable
, y luego llamará a setImageDrawable
.
Aquí está el código.
public void setImageBitmap(Bitmap bm) {
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
Entonces, ¿qué pasa con la API 3 y 4?
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 esto, es fácil de entender setImageResource
/ setImageUri
es lo mismo 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 establecer cualquier Drawable
a la vista de Imagen.
Además de configurar Drawable
través de la API de Java, también podría usar la atribución de XML para establecer el origen 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.