Je veux savoir comment ajouter une couche d'ombre à une vue générale dans Android. pour par exemple: supposons que j'ai une mise en page XML, montrant quelque chose comme ça ..
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
<Button....
...
</LinearLayout>
Maintenant, quand il est affiché, je veux avoir une ombre autour.
Il existe un truc simple, utilisant deux vues qui forment l'ombre.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:padding="10dp"
Android:background="#CC55CC">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:stretchColumns="0">
<TableRow>
<LinearLayout
Android:id="@+id/content"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="#FFFFFF"
Android:text="@string/hello" />
</LinearLayout>
<View
Android:layout_width="5dp"
Android:layout_height="fill_parent"
Android:layout_marginTop="5dp"
Android:background="#55000000"/>
</TableRow>
</TableLayout>
<View
Android:layout_width="fill_parent"
Android:layout_height="5dp"
Android:layout_marginLeft="5dp"
Android:background="#55000000"/>
</LinearLayout>
</FrameLayout>
J'espère que cette aide.
La meilleure façon de créer une ombre consiste à utiliser une image 9patch
comme arrière-plan De la vue (ou une ViewGroup
qui enveloppe la vue).
La première étape consiste à créer une image png avec une ombre autour. J'ai utilisé Photoshop pour créer une telle image. C'est vraiment simple.
La prochaine étape consiste à créer des dessins de 9 patchs à partir de cette image.
draw9patch
à partir de Android-sdk/tools
draw9patch
shadow.9.png
.Vous pouvez maintenant ajouter cette ombre en tant qu'arrière-plan des vues auxquelles vous souhaitez ajouter Ajoutez shadow.9.png
à res/drawables
. Maintenant, ajoutez-leen tant que fond:
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/shadow"
Android:paddingBottom="5px"
Android:paddingLeft="6px"
Android:paddingRight="5px"
Android:paddingTop="5px"
>
J'ai récemment écrit un article blog qui explique cela en détail et Inclut l'image 9patch que j'utilise pour créer l'ombre.
En supposant que vous utilisiez une mise en page linéaire (j’ai envisagé une mise en page linéaire verticale) .. et que vous avez une vue juste en dessous de votre mise en page linéaire.Maintenant, pour cette vue, indiquez une couleur de début et une couleur de fin ... son travail pour moi .. Si vous avez besoin d'un effet encore meilleur, alors il suffit de contourner les couleurs de début et de fin.
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<LinearLayout
Android:id="@+id/vertical"
Android:layout_width="match_parent"
Android:layout_height="150dp"
Android:background="@drawable/layout_back_bgn"
Android:orientation="vertical" >
</LinearLayout>
<View
Android:layout_below="@+id/vertical"
Android:layout_width="match_parent"
Android:layout_height="10dp"
Android:background="@drawable/shadow"
>
</View>
</LinearLayout>
layout_back_bgn.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" >
<solid Android:color="#FF4500" />
</shape>
shadow.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
<gradient
Android:startColor="#4D4D4D"
Android:endColor="#E6E6E6"
Android:angle="270"
>
</gradient>
</shape>
J'ai essayé de poster une image que je possède après avoir utilisé le code ci-dessus, mais stackoverflow ne me permet pas car je n'ai pas la réputation ... Désolé, à ce sujet.
Vous pouvez utiliser l'altitude, disponible depuis le niveau 21 de l'API
L'élévation d'une vue, représentée par la propriété Z, détermine le aspect visuel de son ombre: vues avec des valeurs Z plus élevées ombres plus grandes et plus douces. Les vues avec des valeurs Z supérieures obstruent les vues avec valeurs Z inférieures; Cependant, la valeur Z d'une vue n'affecte pas le la taille de la vue. Pour définir l’altitude d’une vue:
dans une définition de mise en page, utilisez le fichier
Android:elevation
attribut. Pour définir l’élévation d’une vue dans le code d’une activité, Utilisez le
View.setElevation()
méthode.
Voici ma version ringarde de la solution ... C'est la modification de la solution trouvée ici
Je n'ai pas aimé l'apparence des coins et je les ai tous effacés ...
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!--Layer 0-->
<!--Layer 1-->
<!--Layer 2-->
<!--Layer 3-->
<!--Layer 4 (content background)-->
<!-- dropshadow -->
<item>
<shape>
<gradient
Android:startColor="@color/white"
Android:endColor="@color/white"
Android:centerColor="#10CCCCCC"
Android:angle="180"/>
<padding Android:top="0dp" Android:right="0dp" Android:bottom="2dp" Android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
Android:startColor="@color/white"
Android:endColor="@color/white"
Android:centerColor="#20CCCCCC"
Android:angle="180"/>
<padding Android:top="0dp" Android:right="0dp" Android:bottom="2dp" Android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
Android:startColor="@color/white"
Android:endColor="@color/white"
Android:centerColor="#30CCCCCC"
Android:angle="180"/>
<padding Android:top="0dp" Android:right="0dp" Android:bottom="2dp" Android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
Android:startColor="@color/white"
Android:endColor="@color/white"
Android:centerColor="#40CCCCCC"
Android:angle="180"/>
<padding Android:top="0dp" Android:right="0dp" Android:bottom="2dp" Android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
Android:startColor="@color/white"
Android:endColor="@color/white"
Android:centerColor="#50CCCCCC"
Android:angle="180"/>
<padding Android:top="0dp" Android:right="0dp" Android:bottom="2dp" Android:left="0dp" />
</shape>
</item>
<!-- content background -->
<item>
<shape>
<solid Android:color="@color/PostIt_yellow" />
</shape>
</item>
</LinearLayout>
<View
Android:layout_width="match_parent"
Android:layout_height="2dp"
Android:background="@color/dropShadow" />
_ {Utiliser juste en dessous de LinearLayout} _
Une autre méthode
créez "rounded_corner_bg.xml" dans le dossier/drawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle">
<solid Android:color="@color/primaryColor" />
<corners Android:radius="4dp" />
</shape>
</item>
<item
Android:bottom="2dp"
Android:left="0dp"
Android:right="0dp"
Android:top="0dp">
<shape Android:shape="rectangle">
<solid Android:color="#F7F7F7" />
<corners Android:radius="4dp" />
</shape>
</item>
</layer-list>
Pour utiliser cette dispositionAndroid:background="@drawable/rounded_corner_bg"