33 votes

Comment modifier la transparence (alpha) d'une vue sur une version antérieure à SDK-11 sur Android?

Comment modifier la transparence (alpha) d'une vue sur une version antérieure à SDK-11 sur Android?

Avant de suggérer d'utiliser une couleur de fond avec une certaine transparence, notez que cette méthode n'inclut pas tous les éléments de la vue, tels que le texte d'un bouton ou les vues enfant d'un groupe de vues.

47voto

Grime Points 531

Essayez d’utiliser un AlphaAnimation: http://developer.android.com/reference/android/view/animation/AlphaAnimation.html


/ * Utiliser l'animation pour que la carte soit fanée. * /

 AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F);
alpha.setDuration(0); // Make animation instant
alpha.setFillAfter(true); // Tell it to persist after the animation ends
view.startAnimation(alpha);
 

26voto

lejonl Points 228

Le ViewHelper of NineOldAndroids est ce que j'utilise, c'est une classe d'assistance statique et un vrai bijou! Beaucoup ici recommandent NineOldAndroids mais je n’ai vu aucune mention de ViewHelper. C'est vraiment facile à utiliser.

 import com.nineoldandroids.view.ViewHelper;
...

ViewHelper.setAlpha(myView, .2f);
 

Vous pouvez également l'utiliser pour définir d'autres propriétés telles que x, y, etc., ce qui est très pratique lors de la configuration d'animations ou de la construction de votre interface utilisateur. Merci beaucoup à Jake Wharton d'avoir partagé son travail avec la communauté!

15voto

Rotemmiz Points 4152

EDIT - exemple ci-dessous se réfère pour Android pré-SDK11, mais je viens de découvrir sur un étonnamment grande bibliothèque appelée Neuf Vieux Androïdes, La chose incroyable, il n'est l'activation de toutes les fonctions d'animation d'Android 3.0 pour toutes les versions de l'API!!!

Réponse précédente

J'ai effectivement rencontré ce genre de problème lorsqu'il voulait set alpha de façon dynamique sur un plan complexe. J'ai créé un remplacement de onSetAlpha() et a ajouté une autre fonction récursive, qui vérifie chaque type de vue pour l'image d'arrière-plan, un drawable et les couleurs de texte.

    @Override
public boolean onSetAlpha(int alpha)
{
    return onSetAlpha(alpha, theLayoutYouWantToSetAlphaTo);
}

public boolean onSetAlpha(int alpha, View view)
{
    if (view instanceof ViewGroup)
    {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)
        {
            onSetAlpha(alpha, ((ViewGroup) view).getChildAt(i));
            if (((ViewGroup) view).getBackground() != null) ((ViewGroup) view).getBackground().setAlpha(alpha);
        }
    }
    else if (view instanceof ImageView)
    {
        if (((ImageView) view).getDrawable() != null) ((ImageView) view).getDrawable().setAlpha(alpha);
        if (((ImageView) view).getBackground() != null) ((ImageView) view).getBackground().setAlpha(alpha);
    }
    else if (view instanceof TextView)
    {
        ((TextView) view).setTextColor(((TextView) view).getTextColors().withAlpha(alpha));
        if (((TextView) view).getBackground() != null) ((TextView) view).getBackground().setAlpha(alpha);
    }
    else if (view instanceof EditText)
    {
        ((EditText) view).setTextColor(((EditText) view).getTextColors().withAlpha(alpha));
        if (((EditText) view).getBackground() != null) ((EditText) view).getBackground().setAlpha(alpha);
    }
    return true;
}

Vous pouvez ajouter d'autres types de vues que vous en avez besoin.

9voto

Navin Points 1065

Vous pouvez étendre la méthode draw () de vues et utiliser la méthode canvas.saveAlphaLayer ().

 public void draw(Canvas canvas) {
    canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG);
    super.draw(canvas);
    canvas.restore();
}
 

0voto

Gangnus Points 7646

Vous pouvez définir l'Alpha à toutes les couleurs de l'affichage.(par exemple le texte d'un bouton ou de l'enfant du point de vue d'un groupe affichage). Faire dans les couleurs xml et de les utiliser dans tous les point de Vue.

Vous pouvez lire les couleurs à partir de la vue de façon récursive et ajouter de l'alpha à eux et de les définir.

Vous pouvez créer l'affichage principal affichage d'une nouvelle Activité. Alors faire comme dans la Façon de créer de la Transparence de l'Activité dans Android?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X