package com.aviary.android.feather.graphics;
import android.graphics.BlurMaskFilter;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
/**
* Drawable used as overlay {@link Drawable} in conjunction with {@link OverlayGalleryCheckboxDrawable}.<br />
* Create a circle drawable using radius and blur_size.
*
* @author alessandro
*
*/
public class GalleryCircleDrawable extends Drawable {
private Paint mPaint;
private Paint mShadowPaint;
final int mShadowOffset = 3;
float mStrokeWidth = 5.0f;
float mRadius, mOriginalRadius;
float centerX, centerY;
/**
* Instantiates a new gallery circle drawable.
*
* @param radius
* Radius of the circle
* @param blur_size
* blur size, if > 0 create a blur mask around the circle
*/
public GalleryCircleDrawable( float radius, int blur_size ) {
super();
mPaint = new Paint( Paint.ANTI_ALIAS_FLAG );
mPaint.setStrokeWidth( mStrokeWidth );
mPaint.setStyle( Paint.Style.STROKE );
mPaint.setColor( Color.WHITE );
mShadowPaint = new Paint( mPaint );
mShadowPaint.setColor( Color.BLACK );
update( radius, blur_size );
}
/**
* Sets the stroke width.
*
* @param value
* the new stroke width
*/
public void setStrokeWidth( float value ) {
mStrokeWidth = value;
mPaint.setStrokeWidth( mStrokeWidth );
invalidateSelf();
}
/**
* Update.
*
* @param radius
* the radius
* @param blur_size
* the blur_size
*/
public void update( float radius, int blur_size ) {
mOriginalRadius = radius;
if ( blur_size > 0 )
mPaint.setMaskFilter( new BlurMaskFilter( blur_size, Blur.NORMAL ) );
else
mPaint.setMaskFilter( null );
invalidateSelf();
}
/*
* (non-Javadoc)
*
* @see android.graphics.drawable.Drawable#draw(android.graphics.Canvas)
*/
@Override
public void draw( Canvas canvas ) {
canvas.drawCircle( centerX, centerY + mShadowOffset, mRadius, mShadowPaint );
canvas.drawCircle( centerX, centerY, mRadius, mPaint );
}
/*
* (non-Javadoc)
*
* @see android.graphics.drawable.Drawable#onBoundsChange(android.graphics.Rect)
*/
@Override
protected void onBoundsChange( Rect rect ) {
super.onBoundsChange( rect );
invalidateSelf();
}
/*
* (non-Javadoc)
*
* @see android.graphics.drawable.Drawable#invalidateSelf()
*/
@Override
public void invalidateSelf() {
super.invalidateSelf();
invalidate();
}
/**
* Invalidate.
*/
protected void invalidate() {
Rect rect = getBounds();
int minSize = Math.max( 1, Math.min( rect.width(), rect.height() ) );
mRadius = ( (float) minSize * mOriginalRadius ) / 2;
centerX = rect.centerX();
centerY = rect.centerY();
}
/*
* (non-Javadoc)
*
* @see android.graphics.drawable.Drawable#getOpacity()
*/
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
/*
* (non-Javadoc)
*
* @see android.graphics.drawable.Drawable#setAlpha(int)
*/
@Override
public void setAlpha( int alpha ) {}
/*
* (non-Javadoc)
*
* @see android.graphics.drawable.Drawable#setColorFilter(android.graphics.ColorFilter)
*/
@Override
public void setColorFilter( ColorFilter cf ) {}
}