Est-il possible d'ajouter une ombre portée à une forme personnalisée sous Android? Après avoir parcouru la documentation, je ne vois qu'un moyen d'appliquer une ombre de texte.
J'ai essayé ceci sans succès:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#90ffffff"/>
<corners android:radius="12dp" />
<item name="android:shadowColor">#000000</item>
<item name="android:shadowRadius">5</item>
<item name="android:shadowDy">3</item>
</shape>
android
android-layout
mdunkle
la source
la source
<!-- Bottom 2dp Shadow -->
je n'en vois aucun2
dans votre code ... ???Voici comment je fais:
Code ci-dessous pour un bouton ÉTAT:
Ensuite, vous devriez avoir un sélecteur avec différentes versions du bouton, quelque chose comme:
j'espère que cela peut vous aider ... bonne chance
la source
Ceci est ma version d'une ombre portée. J'allais chercher une ombre brumeuse tout autour de la forme et j'ai utilisé cette réponse de Joakim Lundborg comme point de départ. Ce que j'ai changé, c'est d'ajouter des coins à tous les éléments d'ombre et d'augmenter le rayon du coin pour chaque élément d'ombre suivant. Voici donc le
xml
:la source
Ce qui suit a fonctionné pour moi: enregistrez simplement sous custom_shape.xml.
la source
Je pense que cette méthode donne de très bons résultats:
la source
Ancienne question, mais Elévation, disponible avec Material Design, fournit désormais une ombre à toutes les vues.
Consultez la documentation sur https://developer.android.com/training/material/shadows-clipping.html
la source
ImageButton
au lieu d'unImageView
plusButton' because it allows a
ImageButton` permet à la fois unandroid:background
et unandroid:src
. J'ai donc pu préciserandroid:elevation
une seule fois et éviter l '«effet de pyramide inca» que j'ai décrit dans mon dernier commentaire.Je suggérerais une petite amélioration à la solution de Bruce qui consiste à éviter de trop dessiner la même forme les unes sur les autres et à utiliser simplement le trait au lieu du solide. Cela ressemblerait à ceci:
Enfin, je voulais signaler aux personnes qui souhaiteraient une ombre dans une direction spécifique que tout ce que vous avez à faire est de régler le haut, le bas, la gauche ou la droite sur 0dp (pour une ligne pleine) ou -1dp (pour rien)
la source
Si cela ne vous dérange pas de faire un dessin personnalisé avec l'API Canvas, consultez cette réponse sur les ombres portées . Voici une question complémentaire à celle qui résout un problème dans l'original.
la source
la source
Je pense que cette valeur d'ombre portée est bonne dans la plupart des cas:
la source
Cette question est peut-être ancienne, mais pour quiconque souhaite à l'avenir un moyen simple d'obtenir des effets d'ombre complexes, consultez ma bibliothèque ici https://github.com/BluRe-CN/ComplexView
En utilisant la bibliothèque, vous pouvez modifier les couleurs des ombres, ajuster les bords et bien plus encore. Voici un exemple pour réaliser ce que vous recherchez.
Pour changer la couleur de l'ombre, utilisez app: shadowColor = "votre code couleur".
la source
9 patch à la rescousse, une belle ombre pourrait être obtenue facilement, surtout avec cet outil génial -
Générateur d'ombre Android 9-patch
PS: si le projet ne peut pas être compilé, vous devrez déplacer un peu les lignes noires dans l'éditeur de studio Android
la source
si vous avez besoin d'une ombre en ligne droite (comme en bas de la barre d'outils), vous pouvez également utiliser gradient xml:
j'espère que cela aidera quelqu'un
la source