J'ai FrameLayout avec Android: elevation = "4dp". Ombre de cette élévation dirigée vers le bas. Je veux changer de direction d'ombre à la hausse.
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:elevation="10dp"
Android:layout_marginBottom="100dp"
Android:background="@color/ColorPrimary"
Android:layout_alignParentBottom="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true">
</FrameLayout>
Je considère que cette méthode est la meilleure solution: Barre de navigation inférieure avec ombre portée Android Merci, Alexander Bilchuk.
Solution:
Vous pouvez dessiner votre propre ombre juste au-dessus de la vue en utilisant la vue simple et son arrière-plan:
<View
Android:layout_width="match_parent"
Android:layout_height="4dp"
Android:layout_above="@id/bottom_bar"
Android:background="@drawable/shadow"/>
drawable/shadow.xml:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient
Android:startColor="#1F000000"
Android:endColor="@Android:color/transparent"
Android:angle="90" />
</shape>
En outre, il n'y a pas de problèmes de compatibilité si vous utilisez cette approche.
En ce qui me concerne, vous ne changez pas l'ombre par vous-même. Dans Androids Material Design, l'ombre est automatiquement déterminée par le degré d'élévation d'un élément.
Selon cette question https://graphicdesign.stackexchange.com/questions/80644/where-are-the-light-sources-located-in-material-design la source de lumière est
45 degrés d'altitude et 90 degrés d'angle
Vous ne devriez vraiment pas utiliser différentes ombres car cela détruirait la cohérence globale de la conception des matériaux. Dans ce cas, la seule chose à faire est d’élever vos éléments. Vous devriez peut-être relire les directives pour la conception de matériel: https://material.io/guidelines/material-design/environment.html#environment-light-shadow