package zenproject.meditation.android.ui.sketch.clear;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.view.animation.AccelerateDecelerateInterpolator;
import zenproject.meditation.android.R;
public class ClearDrawable extends Drawable {
private static final float CONCEALED = 0f;
private static final float REVEALED = 1f;
private static final int OPAQUE = 255;
private static final int TRANSPARENT = 0;
private static final int REVEAL_DURATION = 500;
private final Paint clearPaint;
private float radius;
private Point origin;
private float clearScale;
private int clearAlpha;
public static ClearDrawable newInstance(Context context) {
Paint clearPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
int color = context.getResources().getColor(R.color.colorAccent);
clearPaint.setColor(color);
clearPaint.setStyle(Paint.Style.FILL);
return new ClearDrawable(clearPaint);
}
protected ClearDrawable(Paint paint) {
this.clearPaint = paint;
}
@Override
public void draw(Canvas canvas) {
canvas.drawCircle(origin.x, origin.y, radius * clearScale, clearPaint);
}
@Override
public void setAlpha(int alpha) {
clearAlpha = alpha;
clearPaint.setAlpha(alpha);
invalidateSelf();
}
@Override
public int getAlpha() {
return clearAlpha;
}
@Override
public void setColorFilter(ColorFilter cf) {
clearPaint.setColorFilter(cf);
}
public void setRadius(float radius) {
this.radius = radius;
}
public void setOrigin(Point origin) {
this.origin = origin;
}
@Override
public int getOpacity() {
return clearPaint.getAlpha();
}
protected float getScale() {
return clearScale;
}
protected void setScale(float revealScale) {
this.clearScale = revealScale;
invalidateSelf();
}
public void startRadiusAnimation(Animator.AnimatorListener animatorListener) {
setAlpha(OPAQUE);
Animator animator = generateRadiusAnimation();
animator.addListener(animatorListener);
animator.setDuration(REVEAL_DURATION);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.start();
}
public void startAlphaAnimation(Animator.AnimatorListener animatorListener) {
Animator animator = generateAlphaAnimation();
animator.addListener(animatorListener);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setStartDelay(100);
animator.setDuration(200);
animator.start();
}
private Animator generateRadiusAnimation() {
return ObjectAnimator.ofFloat(this, "scale", CONCEALED, REVEALED);
}
private Animator generateAlphaAnimation() {
return ObjectAnimator.ofInt(this, "alpha", OPAQUE, TRANSPARENT);
}
}