Comme vous pouvez le voir dans l'image, je veux une ombre derrière un Button
. J'ai créé Button
avec des coins arrondis. Mais le problème, c'est que je ne peux pas générer d'ombre derrière cette image. Button
. Comment puis-je y parvenir ?
Réponses
Trop de publicités?Exemple 9 : image de patch avec ombre
Après de nombreuses recherches, j'ai trouvé une méthode simple.
Créez une image de 9 patchs et appliquez-la comme bouton ou comme arrière-plan de toute autre vue.
Vous pouvez créer une image 9 patchs avec des ombres en utilisant ceci site web .
Placez l'image 9 patch dans votre répertoire drawable et appliquez-la comme arrière-plan pour le bouton.
mButton.setBackground(ContextCompat.getDrawable(mContext, R.drawable.your_9_patch_image);
Puisqu'aucune des réponses ici n'aborde vraiment la question, je voulais signaler que https://github.com/Devlight/ShadowLayout (pas mon projet). Il s'agit d'une simple mise en page Android que vous pouvez enrouler autour de n'importe quoi pour lui donner une ombre. La bibliothèque est une seule classe et seulement ~250 lignes. Le README dit qu'elle est dépréciée, mais elle fonctionne très bien.
Envelopper toutes vos vues n'est pas idéal, mais jusqu'à ce qu'Android fournisse un mécanisme standard pour introduire une ombre, ou que vous souhaitiez dessiner tous les états de vos boutons sous forme de bitmaps incluant les pixels de l'ombre, c'est la meilleure option que je pouvais imaginer.
Vous pouvez essayer ceci :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item android:left="1dp" android:top="3dp">
<shape>
<solid android:color="#a5040d" />
<corners android:radius="3dip"/>
</shape>
</item>
</layer-list>
</item>
<item>
<layer-list>
<item android:left="0dp" android:top="0dp">
<shape>
<solid android:color="#99080d" />
<corners android:radius="3dip"/>
</shape>
</item>
<item android:bottom="3dp" android:right="2dp">
<shape>
<solid android:color="#a5040d" />
<corners android:radius="3dip"/>
</shape>
</item>
</layer-list>
</item>