Android ImageView drop shadow

29,434

In android studio there is in build drawable that you can use for apply shadow to any View. That is similar like a drop shadow.

android:background="@drawable/abc_menu_dropdown_panel_holo_light"

Using this you can not change the background color of the view & its border color. If you want your own custom drawable then use 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 -->
        <shape android:shape="rectangle">
            <solid android:color="@android:color/red" />

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

and apply to your view like below

android:background="@drawable/custom_drop_shadow_drawable"

Hope it will help you! Thanks Android View shadow

Share:
29,434
Zhang
Author by

Zhang

Updated on July 09, 2022

Comments

  • Zhang
    Zhang almost 2 years

    I'm trying to add a drop shadow to an ImageView. The other Stackoverflow answer seems to be using canvas and bitmaps etc, way more complicated than it needs to be.

    On iOS I would do something like this:

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

    and it would render a drop shadow, regardless of whether the shadow is being applied on a view, an image or text.

    I've tried to do the same on Android but it just refuses to work:

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

    I don't see any expected red drop shadow on my bird image at all.

    Am I doing something wrong?

    Example

    Let's say I want the drop shadow like this:

    drop shadow example

    Update

    Do I have to resort to Android 5.0 and the new Elevation api (http://developer.android.com/training/material/shadows-clipping.html) ?

    But if one was to use new API, then according to current demographics (http://www.droid-life.com/2016/02/02/android-distribution-february-2016/) more than 50% of users will not be able to use the app.

    T_T

  • ClassA
    ClassA almost 6 years
    You could have at-least given credit to the original answer - stackoverflow.com/a/33889791/8199772
  • Nizamudeen Sherif
    Nizamudeen Sherif about 5 years
    This one makes a rectangular shadow. Not shadow around the image as above.