web-dev-qa-db-fra.com

Comment appliquer une ombre à ImageView?

Je veux appliquer une ombre à la ImageView. Quand j'applique une ombre à une TextView, je l'obtiens mais pareil, on n'obtient pas à ImageView. Comment puis-je résoudre ce problème?

Nous pouvons également utiliser CardView qui fournit un fond et une ombre aux angles arrondis. Pour utiliser cela, vous devez ajouter v7 CardView library en tant que dépendance du projet dans le fichier build.gradle, comme ci-dessous.

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

Remarque: Modifiez 23.0.1 dans la ligne ci-dessus avec la version respectée.

J'ai donc entouré la ImageView avec CardView pour créer une 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>

Cela va ajouter une ombre autour de l'image.

Remarque: je ne sais pas si c'est une bonne solution de contournement. Je suis un débutant. JE essayé de mettre en œuvre la CardView qui donne une idée à mettre en œuvre la même chose pour cela. Si ce n'est pas bon, veuillez me mettre à jour avec la raison.

3

Ceci est tiré de la présentation de Romain Guy à Devoxx, pdf found here .

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);

J'espère que cela t'aides.

REMARQUES

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

SetShadowLayer ne fonctionne malheureusement pas avec l'accélération matérielle, ce qui réduit considérablement les performances (@Matt Wear) 

Réponse tirée de ici

Pour Api supérieur à 21 . Vous pouvez essayer en XML dans imageview ou Button: Lire ici sur le site du développeur

Android:elevation="5dp"
2
Avinash Verma

Vous pouvez créer une liste de calques pouvant être dessinée et y placer vos deux éléments (une dessinable) pour une image et votre ombre. 

La position et le contenu de votre ombre peuvent changer en fonction de l'endroit où vous souhaitez appliquer l'ombre (haut, gauche, droite, droite et gauche, etc.) et du style de votre ombre. 

1
stdout

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
Harry