54 votes

Existe-t-il un moyen de définir l'alpha d'une drawable à l'aide de XML ?

Facile comme tout. Je veux faire un bouton alpha, qui aurait un dessinable sélectionné de cette façon :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Play/Pause -->
    <item android:state_selected="false" android:drawable="@drawable/item" />
    <item android:state_selected="true" android:drawable="@drawable/item" />

</selector>

Je voudrais faire quelque chose comme ça :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Play/Pause -->
    <item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" />
    <item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" />

</selector>

Merci pour tout.

0 votes

Je suis toujours en train d'essayer de comprendre cela aussi. Vous avez réussi ?

0 votes

Remplacez votre XxxView par AppCompatXxxView dans votre layout XML et suivez les conseils de @kikettas : stackoverflow.com/a/37947545/3810036

56voto

Kasium Points 157

Cela fait un moment que l'OP a été lancé, mais j'ai personnellement trouvé une solution qui a bien mieux fonctionné pour moi que les réponses suggérées. Créer un BitmapDrawable permet de définir facilement l'alpha :

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/your_drawble"
    android:alpha="77">
</bitmap>

L'alpha peut être une valeur comprise entre 0 et 255. Notez qu'il s'agit en quelque sorte de l'inverse de la valeur de couleur HEX alpha, car par exemple 70% alpha serait B3 en HEX et 77 dans le BitmapDrawable.

17 votes

En fait, l'alpha dans le xml était de type float, il devrait être une valeur entre 0.0 et 1.0.

3 votes

@liuyong C'est peut-être vrai pour les vues, mais pas pour <bitmap> . La possibilité de définir l'"alpha" d'une <bitmap> est une fonctionnalité actuellement non documentée qui peut ou non fonctionner. La valeur ne représente pas vraiment la valeur alpha au sens traditionnel du terme, mais plutôt son opposé, l'opacité. C'est la raison pour laquelle - si cela fonctionne - vous obtiendrez un bitmap complètement transparent pour la valeur 255 et une opacité totale pour la valeur 0.

0 votes

@sfera alors y a-t-il un moyen de faire cela en XML, ou n'avons-nous pas de chance ?

51voto

Prashant Points 508

J'ai obtenu le même résultat en utilisant une table de dessin

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#5000ddff" />
</shape>

Ici, nous avons utilisé l'alpha 50, qui définit le niveau d'opacité. J'espère que cela vous aidera

0 votes

C'est utile. En l'utilisant en combinaison avec une liste de calques et votre propre élément dessinable, vous pouvez créer un dessinable pour un état pressé.

2 votes

Je n'ai pas compris, comment cela va-t-il changer l'alpha d'un drawable ?

4 votes

Les valeurs hexagonales sont décrites par paires. Les 2 premières représentent l'alpha (pour Android en tout cas, parfois ce sont les 2 dernières). Les 3 paires suivantes représentent le rouge, le bleu et le vert. #5000ddff alpha(50) red(00) blue(dd) green(ff)

20voto

Fredrik Metcalf Points 287

J'ai cherché la même chose. Même si ce message a été posté il y a plus de quatre ans, c'est celui qui apparaît le plus souvent lorsqu'on cherche ce problème sur Google, alors je vais répondre ici.

Voici ma solution

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <bitmap android:alpha="@integer/not_pressed_alpha" android:src="@drawable/item"/>
    </item>
    <item android:state_pressed="true" android:drawable="@drawable/item" />
</selector>

0 votes

J'ai essayé ça. Cela ne fonctionne pas pour moi. Testé sur émulateur (Nexus 5X API 23).

1 votes

Cela a fonctionné après avoir changé state_selected a state_pressed .

0 votes

Oui, ce serait le cas normal, mais j'ai utilisé le code d'exemple de la question.

16voto

kikettas Points 796

Pour ceux qui ont le même problème que OP, AppCompat vous permet maintenant de définir le paramètre 'alpha', comme il le souhaitait dans son code cible :

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Play/Pause -->
    <item android:alpha="125" android:state_selected="false" android:drawable="@drawable/item" />
    <item android:alpha="255" android:state_selected="true" android:drawable="@drawable/item" />

</selector>

Plus d'informations aquí .

4 votes

"À partir de l'API 23, les éléments peuvent facultativement définir un attribut Android:alpha"

1 votes

N'est-ce pas seulement pour les couleurs et non pour les éléments à dessiner ?

1 votes

La valeur alpha ne devrait-elle pas être comprise entre 0 et 1 ?

9voto

Ted Hopp Points 122617

NOTE : Cette réponse est obsolète. Voir la réponse de kikettas pour savoir comment résoudre le problème de l'OP en utilisant la bibliothèque de compatibilité. (Je supprimerais bien cette réponse, mais SO ne me le permet pas car OP l'a marquée comme étant la solution).

Réponse originale :

Je ne pense pas qu'il y ait un moyen de faire ça. Il existe un attribut android:alpha mais elle s'applique aux vues et non aux objets à dessiner. Elle n'est disponible que depuis le niveau 11 de l'API.

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