package com.aviary.android.feather.widget; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; import com.aviary.android.feather.R; public class ImageViewWithShadow extends ImageView { private Drawable mShadowDrawable; private boolean mShadowEnabled = false; private int mShadowOffsetX = 10; private int mShadowOffsetY = 10; public ImageViewWithShadow( Context context, AttributeSet attrs ) { super( context, attrs ); init( context, attrs, 0 ); } private void init( Context context, AttributeSet attrs, int defStyle ) { TypedArray a = context.obtainStyledAttributes( attrs, R.styleable.ImageViewWithShadow, defStyle, 0 ); mShadowDrawable = a.getDrawable( R.styleable.ImageViewWithShadow_shadowDrawable ); if ( null == mShadowDrawable ) { mShadowEnabled = false; } else { mShadowEnabled = true; } mShadowOffsetX = a.getInteger( R.styleable.ImageViewWithShadow_shadowOffsetX, 5 ); mShadowOffsetY = a.getInteger( R.styleable.ImageViewWithShadow_shadowOffsetY, 5 ); a.recycle(); } public void setShadowEnabled( boolean value ) { mShadowEnabled = value; } @Override protected void onDraw( Canvas canvas ) { Drawable drawable = getDrawable(); Matrix matrix = getImageMatrix(); if ( null != drawable && mShadowEnabled ) { int saveCount = canvas.getSaveCount(); int paddingLeft = getPaddingLeft(); int paddingTop = getPaddingTop(); int dwidth = drawable.getIntrinsicWidth(); int dheight = drawable.getIntrinsicHeight(); mShadowDrawable.setBounds( 0, 0, dwidth + mShadowOffsetX, dheight + mShadowOffsetY ); canvas.save(); canvas.translate( paddingLeft, paddingTop ); if ( null != matrix ) { // canvas.concat( matrix ); } mShadowDrawable.draw( canvas ); canvas.restoreToCount( saveCount ); } super.onDraw( canvas ); } }