android - studio - Diferencia entre setAlpha y setImageAlpha
metodos de imageview (4)
ImageView tiene dos métodos relacionados con los métodos: setAlpha y setImageAlpha . El primero está disponible desde el nivel 1 de API, pero está en desuso desde el nivel 16. El último está disponible desde el nivel 16. También hay otro método setAlpha , desde la clase View , y esto se introduce en el nivel 11 de API.
¿Es la diferencia entre ImageView # setAlpha y ImageView # setImageAlpha solo en el nombre? ¿Hay alguna diferencia de comportamiento? ¿Cuál es la relación entre View # setAlpha e ImageView # setAlpha?
Creo que solo el nombramiento es una diferencia. Porque setImageAlpha()
es más específico que setAlpha()
. Para View#setAlpha
y ImageView#setAlpha/setImageAlpha
no hay una relación directa ... la clase View
tiene un setAlpha porque podría funcionar como elemento principal de View#ImageView
por lo que funciona como un contenedor.
Con el setAlpha
usted podría configurar la opacidad de todo el contenedor, ya que necesita ese método. con setImageAlpha
puede establecer el alfa de solo la imagen y no todo el contenedor.
Además de esto, no puedo pensar en una razón por la que ambos tengan un método alfa.
sí, solo es una diferencia de nombre: la implementación actual en la fuente de Android en el nivel 16 de la API es:
/**
* Sets the alpha value that should be applied to the image.
*
* @param alpha the alpha value that should be applied to the image
*
* @see #getImageAlpha()
*/
@RemotableViewMethod
public void setImageAlpha(int alpha) {
setAlpha(alpha);
}
ImageView.setAlpha(int)
ha cambiado su nombre a ImageView.setImageAlpha(int)
para evitar confusiones con el nuevo método View.setAlpha(float)
introducido en el nivel API 11.
View.setAlpha(float)
es un método general disponible en todas las View
, incluido ImageView
. Aplica la opacidad especificada a toda la vista. Para lograr esto, de forma predeterminada, el sistema crea un búfer temporal (una capa de hardware) donde la vista se dibuja como siempre, luego el búfer se dibuja en la pantalla con el valor alfa especificado. Es un mecanismo de dos pasos que requiere la asignación inicial de un búfer, por lo que es algo más lento. Vea este video para obtener más información y cómo cambiar el comportamiento predeterminado: Costo oculto de la transparencia . Es importante tener en cuenta que, de forma predeterminada, ImageView
incluye una optimización que evitará esta asignación de búfer si no tiene fondo, por lo que en la práctica no habrá penalización de rendimiento al llamar a ImageView.setAlpha(float)
si ImageView
no tiene fondo.
ImageView.setImageAlpha(int)
(y ImageView.setAlpha(int)
) son métodos propios de ImageView
. Controlan el valor alfa que se usa para dibujar la imagen de contenido (mapa de bits u otro) directamente en la pantalla, sin un pase intermedio, por lo que este es el método preferido para aplicar la transparencia a una imagen mostrada por un ImageView
. Por supuesto, si establece un Dibujable de fondo en su ImageView
que también quiere que sea translúcido, este método no producirá el resultado esperado.
-
View.setAlpha(float)
acepta un float como entrada y espera un valor en el rango 0..1 incluido. -
ImageView.setAlpha(int)
acepta un int como entrada y espera un valor en el rango de 0..255 inclusive.ImageView.setAlpha(int)
está en desuso. Esto probablemente se deba a que querían eliminar el conflicto con elView.setAlpha(float)
subyacenteView.setAlpha(float)
- Como han respondido otros respondedores,
ImageView.setImageAlpha(int)
simplemente llama a través deImageView.setAlpha(int)
desuso. Debería esperar queImageView.setAlpha(int)
se eliminará en una futura actualización de API y, por lo tanto, debe evitar su uso.