L'élévation pour ImageView ne fonctionne pas. J'ai déclaré ImageView en XML comme ceci:
<ImageView
Android:id="@+id/image"
Android:layout_width="100dp"
Android:layout_height="50dp"
Android:elevation="10dp"
Android:src="@drawable/youtube" />
Que dois-je faire d'autre pour que l'élévation fonctionne correctement pour ImageView?
L'ombre d'élévation est dérivée de l'arrière-plan dessinable d'une vue. Si votre ImageView n'a pas d'arrière-plan, vous ne verrez aucune ombre.
Si vous souhaitez modifier ce comportement, vous devez créer votre propre ViewOutlineProvider
et appeler View.setOutlineProvider()
pour le définir (et ce n'est pas anodin).
Fonctionne dans toutes les dernières versions
tilisez CardView comme disposition parent. Utilisez Android:background="@drawable/your_img"
au lieu de Android:src="@drawable/your_img"
dans ImageView.
<Android.support.v7.widget.CardView
Android:layout_gravity="center_horizontal"
app:cardElevation="5dp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:id="@+id/image"
Android:background="@drawable/your_img"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:contentDescription="@null" />
</Android.support.v7.widget.CardView>
Si vous utilisez CardView, veillez à laisser l'arrière-plan de CardView transparent.
<Android.support.v7.widget.CardView
Android:layout_gravity="center_horizontal"
app:cardElevation="@dimen/cardview_default_elevation"
app:cardBackgroundColor="@Android:color/transparent"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:id="@+id/image"
Android:layout_width="100dp"
Android:layout_height="50dp"
Android:src="@drawable/youtube" />
</Android.support.v7.widget.CardView>
Pour afficher une image ronde avec SHADOW avec attribut d'élévation, j'ai créé un rond dessinable SANS OMBRE comme indiqué ci-dessous:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape Android:shape="oval">
<solid Android:color="@Android:color/white" />
</shape>
</item>
</layer-list>
Utilisez ce dessin comme arrière-plan dans votre ImageView comme indiqué ci-dessous:
<ImageView
Android:id="@+id/my_button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/round_shape"
Android:elevation="5dp"
Android:src="@drawable/center" />
Cela affichera ImageView avec une ombre.
Une question qui pourrait se poser dans votre esprit est de savoir pourquoi utiliser xml drawable. Comme mentionné par d'autres développeurs sur diverses réponses à cette question, l'ombre est formée à partir du fond et d'un fond bordé pour être plus spécifique. Le dessin Xml nous aide à créer un arrière-plan bordé à partir duquel l'attribut d'élévation peut créer une ombre.
Au lieu d'utiliser Android: src, vous devez passer à Android: arrière-plan pour afficher les ombres.
<ImageView
Android:id="@+id/image"
Android:layout_width="100dp"
Android:layout_height="50dp"
Android:elevation="10dp"
Android:background="@drawable/youtube" />
En complément de la clarification de réponse de BladeCoder : appliquer Android:outlineProvider="bounds"
au ImageView
entraînera l'affichage de l'ombre.
Sur Lollipop
cela fonctionne en définissant l'altitude. Pour pre-Lollipop,
, Vous devez implémenter vous-même les ombres. Support-v4
A la méthode ViewCompat.setElevation(view, value)
pour by si vous vérifiez les sources il n'y a pas d'implémentation. (au moins, au moment de la rédaction).