Custom ImageView with drop shadow Custom ImageView with drop shadow android android

Custom ImageView with drop shadow


Okay, I don't foresee any more answers on this one, so what I ended up going with for now is just a solution for rectangular images. I've used the following NinePatch:

alt text

along with the appropriate padding in XML:

<ImageView        android:id="@+id/image_test"        android:background="@drawable/drop_shadow"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingLeft="6px"        android:paddingTop="4px"        android:paddingRight="8px"        android:paddingBottom="9px"        android:src="@drawable/pic1"        />

to get a fairly good result:

alt text

Not ideal, but it'll do.


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

  1. Don't forget for Honeycomb and above you need to invokesetLayerType(LAYER_TYPE_SOFTWARE, mShadow), otherwise you will not see your shadow! (@Dmitriy_Boichenko)
  2. SetShadowLayer doesnot work with hardware acceleration unfortunately so it greatlyreduces performances (@Matt Wear) [1] [2]


I believe this answer from UIFuel

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">     <!-- Drop Shadow Stack -->     <item>        <shape>            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />            <solid android:color="#00CCCCCC" />        </shape>    </item>     <item>        <shape>            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />            <solid android:color="#10CCCCCC" />        </shape>    </item>     <item>        <shape>            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />            <solid android:color="#20CCCCCC" />        </shape>    </item>     <item>        <shape>            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />            <solid android:color="#30CCCCCC" />        </shape>    </item>    <item>        <shape>            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />            <solid android:color="#50CCCCCC" />        </shape>    </item>    <!-- Background -->    <item>    <shape>            <solid android:color="@color/white" />        <corners android:radius="3dp" />    </shape>    </item></layer-list>