Comment appliquer shadow à ImageView?

je veux appliquer l'ombre sur le ImageView . Quand j'applique shadow à un TextView Je l'obtiens mais même il ne va pas à ImageView . Comment puis-je résoudre ce problème?

22
demandé sur Aditya Vyas-Lakhan 2011-12-02 11:39:20

4 réponses

nous pouvons également utiliser CardView qui fournit un fond de coin arrondi et l'ombre. Pour utiliser cela, vous devez ajouter la bibliothèque V7 CardView comme une dépendance au projet dans la construction.gradle comme ci-dessous.

dependencies {
    compile 'com.android.support:cardview-v7:23.0.1'
    -------
}

Note: modifier 23.0.1 dans la ligne ci-dessus avec la version respectée.

donc j'ai entouré le ImageView avec CardView pour faire ombre comme ci-dessous.

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@android:color/white">

    <ImageView
        android:id="@+id/dish_image"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:adjustViewBounds="true" />

</android.support.v7.widget.CardView>

il ajoutera une ombre autour de l'image.

Remarque: je ne sais pas si c'est une bonne solution. Je suis un débutant. Je essayé de mettre en œuvre le CardView qui donne une idée à mettre en œuvre la même chose pour ça. Si ce n'est pas bon s'il vous plaît me mettre à jour avec la raison.

3
répondu Mahendran Sakkarai 2015-10-06 18:46:48

extrait de la présentation de Romain Guy à Devoxx, pdf trouvé ici .

Paint mShadow = new Paint(); 
// radius=10, y-offset=2, color=black 
mShadow.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
// in onDraw(Canvas) 
canvas.drawBitmap(bitmap, 0.0f, 0.0f, mShadow);

Espérons que cette aide.

NOTES

N'oubliez pas pour Honeycomb et au-dessus vous devez invoquer setLayerType(LAYER_TYPE_SOFTWARE, mShadow) , sinon vous ne verrez pas votre ombre! (@Dmitriy_Boichenko)

SetShadowLayer ne fonctionne pas avec l'accélération matérielle malheureusement il réduit considérablement les performances (@Matt Usure)

réponse tirée de ici

pour les Api supérieures à 21. Vous pouvez essayer en xml dans imageview ou bouton: lire ici sur le site du développeur

android:elevation="5dp"
2
répondu Avinash Verma 2017-05-23 12:25:52

vous pouvez créer une liste de calques à dessiner et y placer vos deux éléments (dessins) pour une image et votre ombre.

la position et le contenu de votre élément d'ombre peuvent changer selon l'endroit où vous voulez appliquer l'ombre (en haut, à gauche, à droite, à droite et à droite, etc.) et le style de votre ombre.

1
répondu zgulser 2016-02-15 12:06:36

créer un fichier shadow_rect.xml

<?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="@android:color/darker_gray" />
            <corners android:radius="0dp"/>
        </shape>
    </item>
    <item android:right="1dp"  android:bottom="2dp">
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="1dp"/>
        </shape>
    </item>

</layer-list>

et l'utiliser comme android:background="@drawable/shadow_rect dans votre Imageview.

0
répondu Harry 2016-07-13 08:11:18