web-dev-qa-db-fra.com

Existe-t-il un moyen de définir l'alpha de Drawable en utilisant XML?

Facile comme lui. 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 .

47
A.Quiroga

Je ne pense pas qu'il y ait moyen de le faire. Il y a un attribut Android:alpha, mais cela s'applique aux vues, pas aux dessins. Il n'est disponible que depuis l'API niveau 11.

9
Ted Hopp

Cela fait un moment depuis l'OP, mais personnellement, j'ai trouvé une solution qui fonctionnait beaucoup mieux pour moi que les réponses suggérées. Créer un BitmapDrawable rend est facilement possible de définir 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>

Alpha peut être n'importe quelle valeur entre 0 et 255. Notez qu'il s'agit en quelque sorte de l'inverse de la valeur de couleur HEX alpha, comme par exemple 70% alpha serait B3 dans HEX et 77 dans BitmapDrawable.

52
Kasium

J'ai obtenu le même résultat en utilisant un

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

Ici utilisé l'alpha 50, qui définit le niveau d'opacité. J'espère que ça t'as aidé

42
Prashant

Je cherchais la même chose. Même si cela a été publié il y a plus de quatre ans, il s'agit du premier message lors de la recherche sur le problème, je vais donc répondre ici.

C'est 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>
15
Fredrik Metcalf

Pour ceux qui ont le même problème que OP, AppCompat vous permet désormais 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'infos ici .

12
kikettas

Mon objectif était de faire en sorte qu'un bouton soit sélectionné et appuyé sur un état alpha différent - mais en utilisant la même ressource (png) et en affectant le moins de fichiers possible.

Ma solution est similaire à la modification de l'alpha dans un BitmapDrawable - mais elle le fait à partir du sélecteur de sorte qu'un seul fichier est affecté.

Utilisez la fonction de teinte de Bitmap, rappelez-vous que la teinte colorera les pixels existants, utilisez donc une couleur blanche. Par exemple, # 80FFFFFF - pour conserver la couleur comme d'origine mais réduire l'alpha de 50% Cela peut également être utilisé pour changer la couleur de l'icône lorsqu'elle est enfoncée.

Voici mon fichier XML dessinable:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true">
        <bitmap
            Android:src="@drawable/ic_camera"
            Android:tint="#80FFFFFF">
        </bitmap>
    </item>
    <item Android:state_pressed="true">
        <bitmap
            Android:src="@drawable/ic_camera"
            Android:tint="#80FFFFFF">
        </bitmap>
    </item>
    <item>
        <bitmap
            Android:src="@drawable/ic_camera">
        </bitmap>
    </item>
</selector>
3
Richard Sahlin

J'utilise ce qui suit pour un bouton radio personnalisé qui devrait être barré en diagonale lorsqu'il est désactivé.

Exemple d'image de 5 boutons radio où 4 d'entre eux sont activés

  <item Android:state_enabled="false">
    <layer-list>
      <item>
        <shape Android:shape="rectangle">
          <size
              Android:height="35dp"
              Android:width="35dp"/>
          <stroke
              Android:color="@color/someGrey"
              Android:width="1dp"/>
          <corners Android:radius="1dp"/>
        </shape>
      </item>
      <item>
        <rotate
            Android:fromDegrees="135"
            Android:pivotX="50%"
            Android:pivotY="50%"
            Android:toDegrees="135">
          <shape Android:shape="line">
            <stroke
                Android:color="@color/someGrey"
                Android:width="1dp"/>
          </shape>
        </rotate>
      </item>
    </layer-list>
  </item>
1
dnldttmr

je pense que vous pourriez créer votre propre dessinable qui pourrait prendre cet argument comme paramètre. je n'ai jamais fait une telle chose cependant.

consultez ce lien:

Comment définir la valeur alpha pour drawable dans un StateListDrawable?

si ce n'est pas possible, vous pouvez toujours le faire en code ...

voici 2 liens que j'ai trouvés à ce sujet, au cas où vous souhaiteriez utiliser des bitmaps à la place:

0
android developer

Je suis d'accord avec la suggestion de Kalsium, donc pour certaines versions Android Android, la spécification pour Alpha est en pourcentage.

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/your_drawble"
    Android:alpha="0.5">
</bitmap>
0
Fernando Silva