How to apply shadow to ImageView?
We can also use CardView which provides a rounded corner background and shadow. To use that you need to add the v7 CardView library as a dependency to the project in the build.gradle like below.
dependencies { compile 'com.android.support:cardview-v7:23.0.1' -------}
Note: Change
23.0.1
in the above line with the respected version.
So I surrounded the ImageView
with CardView
to make shadow like below.
<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>
It'll add a shadow around the image.
Note: I don't know whether it is a good workaround. I am a beginner. I tried to implement the
CardView
which gives an idea to implement the same for this. If it is not good please update me with the reason.
This is taken from Romain Guy's presentation at 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);
Hope this helps.
NOTES
Don't forget for Honeycomb and above you need to invoke setLayerType(LAYER_TYPE_SOFTWARE, mShadow)
, otherwise you will not see your shadow! (@Dmitriy_Boichenko)
SetShadowLayer
does not work with hardware acceleration unfortunately so it greatly reduces performances (@Matt Wear)
Answer Taken from Here
For Api greater than 21.You can try in xml in imageview or Button : Read here at developer site
android:elevation="5dp"
Create a file 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>
And the use this as android:background="@drawable/shadow_rect within your Imageview.