web-dev-qa-db-fra.com

Android Ombre portée ImageView

J'essaie d'ajouter une ombre portée à une ImageView. L'autre réponse de Stackoverflow semble utiliser le canevas et les bitmaps, etc., bien plus compliqué qu'il ne devrait l'être.

Sur iOS, je ferais quelque chose comme ceci:

myImageView.layer.shadowColor = [UIColor redColor].CGColor;
myImageView.layer.shadowRadius = 5;
myImageView.layer.shadowOffset = CGRectMake(0, 5);

et il rendrait une ombre portée, que l'ombre soit appliquée sur une vue, une image ou du texte.

J'ai essayé de faire la même chose sur Android mais il refuse simplement de fonctionner:

birdImageView = new ImageView(context);
birdImageView.setImageResource(R.drawable.yellow_bird);

Paint paint = new Paint();
Paint.setAntiAlias(true);


birdImageView.setLayerType(LAYER_TYPE_SOFTWARE, null);
Paint.setShadowLayer(5, 0, 5, Color.argb(255, 255, 0, 0));
birdImageView.setLayerPaint(Paint);

Je ne vois aucune ombre portée rouge attendue sur l'image de mon oiseau.

Est-ce que je fais quelque chose de mal?

Exemple

Disons que je veux l'ombre portée comme ceci:

drop shadow example

Mettre à jour

Dois-je recourir à Android 5.0 et la nouvelle API Elevation ( http://developer.Android.com/training/material/shadows-clipping.html ) ?

Mais si l'on devait utiliser une nouvelle API, alors selon la démographie actuelle ( http://www.droid-life.com/2016/02/02/Android-distribution-février-2016/ ) plus plus de 50% des utilisateurs ne pourront pas utiliser l'application.

T_T

11
Zhang

Dans Android studio, il y a dans la construction drawable que vous pouvez utiliser pour appliquer l'ombre à n'importe quel View. C'est similaire à une ombre portée.

Android:background="@drawable/abc_menu_dropdown_panel_holo_light"

En utilisant cela, vous ne pouvez pas changer la couleur d'arrière-plan de la vue et sa couleur de bordure. Si vous souhaitez que votre propre dessin soit personnalisé, utilisez layer-list

custom_drop_shadow_drawable.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <!--the shadow comes from here-->
    <item
        Android:bottom="0dp"
        Android:drawable="@Android:drawable/dialog_holo_light_frame"
        Android:left="0dp"
        Android:right="0dp"
        Android:top="0dp">

    </item>

    <item
        Android:bottom="0dp"
        Android:left="0dp"
        Android:right="0dp"
        Android:top="0dp">
        <!--whatever you want in the background, here i preferred solid white -->
        <shape Android:shape="rectangle">
            <solid Android:color="@Android:color/red" />

        </shape>
    </item>
</layer-list>

et appliquez à votre vue comme ci-dessous

Android:background="@drawable/custom_drop_shadow_drawable"

J'espère que cela vous aidera! Merci Android View shadow

11
Maheshwar Ligade