I want to apply shadow to the ImageView
. When I'm applying shadow to a TextView
I'm getting it but same it's not getting to ImageView
. How can I solve this problem?
问题:
回答1:
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.
回答2:
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"
回答3:
You can create a layer list drawable and put your two items (drawables) in it for an image and your shadow.
Your shadow item's position & content might change according to where you want to apply the shadow (top, left, right, both right & left etc) and style of your shadow.
回答4:
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.