package com.aviary.android.feather.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.aviary.android.feather.R;
public class ImageViewWithSelection extends ImageView {
private Drawable mSelectionDrawable;
private Rect mSelectionDrawablePadding;
private RectF mRect;
private boolean mSelected;
private int mPaddingLeft = 0;
private int mPaddingTop = 0;
public ImageViewWithSelection( Context context, AttributeSet attrs ) {
super( context, attrs );
init( context, attrs, -1 );
}
public ImageViewWithSelection( Context context, AttributeSet attrs, int defStyle ) {
super( context, attrs, defStyle );
init( context, attrs, defStyle );
}
private void init( Context context, AttributeSet attrs, int defStyle ) {
TypedArray array = context.obtainStyledAttributes( attrs, R.styleable.ImageViewWithSelection, defStyle, 0 );
mSelectionDrawable = array.getDrawable( R.styleable.ImageViewWithSelection_selectionSrc );
int pleft = array.getDimensionPixelSize( R.styleable.ImageViewWithSelection_selectionPaddingLeft, 0 );
int ptop = array.getDimensionPixelSize( R.styleable.ImageViewWithSelection_selectionPaddingTop, 0 );
int pright = array.getDimensionPixelSize( R.styleable.ImageViewWithSelection_selectionPaddingRight, 0 );
int pbottom = array.getDimensionPixelSize( R.styleable.ImageViewWithSelection_selectionPaddingBottom, 0 );
mSelectionDrawablePadding = new Rect( pleft, ptop, pright, pbottom );
array.recycle();
mRect = new RectF();
}
@Override
public void setSelected( boolean value ) {
super.setSelected( value );
mSelected = value;
invalidate();
}
public boolean getSelected() {
return mSelected;
}
@Override
protected void onLayout( boolean changed, int left, int top, int right, int bottom ) {
super.onLayout( changed, left, top, right, bottom );
mPaddingLeft = getPaddingLeft();
mPaddingTop = getPaddingTop();
}
@Override
public void setPadding( int left, int top, int right, int bottom ) {
mPaddingLeft = left;
mPaddingTop = top;
super.setPadding( left, top, right, bottom );
}
@Override
protected void onDraw( Canvas canvas ) {
Drawable drawable = getDrawable();
if ( null == drawable ) return;
Rect bounds = drawable.getBounds();
mRect.set( bounds );
if ( getImageMatrix() != null ) {
getImageMatrix().mapRect( mRect );
mRect.offset( mPaddingLeft, mPaddingTop );
mRect.inset( -( mSelectionDrawablePadding.left + mSelectionDrawablePadding.right ),
-( mSelectionDrawablePadding.top + mSelectionDrawablePadding.bottom ) );
}
if ( mSelectionDrawable != null && mSelected ) {
mSelectionDrawable.setBounds( (int) mRect.left, (int) mRect.top, (int) mRect.right, (int) mRect.bottom );
mSelectionDrawable.draw( canvas );
}
super.onDraw( canvas );
}
}