web-dev-qa-db-fra.com

Différence entre setAlpha et setImageAlpha

ImageView a deux méthodes liées aux méthodes: setAlpha et setImageAlpha . Le premier est disponible depuis le niveau 1 de l'API, mais est obsolète depuis le niveau 16. Le second est disponible depuis le niveau 16. Il existe également une autre méthode setAlpha , de la classe View et ce est introduit dans l'API niveau 11.

La différence entre ImageView # setAlpha et ImageView # setImageAlpha est-elle uniquement dans la dénomination? Y a-t-il une différence de comportement? Quelle est la relation entre View # setAlpha et ImageView # setAlpha?

29
kolistivra

ImageView.setAlpha(int) a été renommé ImageView.setImageAlpha(int) pour éviter toute confusion avec la nouvelle méthode View.setAlpha(float) introduite dans l'API niveau 11.

View.setAlpha(float) est une méthode générale disponible sur tous les Views, y compris ImageView. Il applique l'opacité spécifiée à la vue entière. Pour ce faire, par défaut, le système crée un tampon temporaire (une couche matérielle) où la vue est dessinée comme d'habitude, puis le tampon est dessiné à l'écran avec la valeur alpha spécifiée. C'est un mécanisme à deux passes qui nécessite l'allocation initiale d'un tampon, donc c'est un peu plus lent. Voir cette vidéo pour plus d'informations et comment changer le comportement par défaut: Coût caché de la transparence . Il est important de noter que ImageView inclut par défaut une optimisation qui évitera cette allocation de tampon si elle n'a pas de fond, donc en pratique il n'y aura pas de pénalité de performance lors de l'appel de ImageView.setAlpha(float) si le ImageView n'a pas d'arrière-plan.

ImageView.setImageAlpha(int) (et ImageView.setAlpha(int)) sont des méthodes propres à ImageView. Ils contrôlent la valeur alpha qui est utilisée pour dessiner l'image de contenu (bitmap ou autre) directement sur l'écran, sans passe intermédiaire, c'est donc la méthode préférée à utiliser pour appliquer la transparence à une image affichée par un ImageView. Bien sûr, si vous définissez un arrière-plan Drawable sur votre ImageView que vous souhaitez également être translucide, cette méthode ne produira pas le résultat attendu.

47
BladeCoder
  • View.setAlpha(float) accepte un flottant en entrée et attend une valeur dans la plage 0..1 inclus.
  • ImageView.setAlpha(int) accepte un int en entrée et attend une valeur sur la plage 0..255 inclus. ImageView.setAlpha(int) est obsolète. C'est probablement parce qu'ils voulaient supprimer le conflit avec la View.setAlpha(float) sous-jacente
  • Comme d'autres intervenants l'ont souligné, ImageView.setImageAlpha(int) appelle simplement la ImageView.setAlpha(int) obsolète. Vous devez vous attendre à ce que ImageView.setAlpha(int) soit supprimé dans une future mise à jour de l'API et vous devez donc éviter de l'utiliser.
27
Dean

oui, ce n'est qu'une différence de dénomination - l'implémentation actuelle dans la source Android dans le niveau 16 de l'API est:

/**
 * 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);
}
4
cania

Je crois que seule la dénomination est une différence. Parce que setImageAlpha() est plus spécifique que setAlpha(). Pour le View#setAlpha et ImageView#setAlpha/setImageAlpha il n'y a pas de relation directe .. la classe View a un setAlpha car il pourrait fonctionner comme parent d'un View#ImageView donc il fonctionne comme un conteneur.

Avec le setAlpha, vous pouvez définir l'opacité de tout le conteneur pour cela, il a besoin de cette méthode. avec le setImageAlpha, vous pouvez définir l'alpha uniquement de l'image et non du conteneur entier.

En plus de cela, je ne peux pas vraiment penser à une raison pour laquelle ils ont tous deux une méthode alpha.

1
Crimson