package com.joanfuentes.hintcaseassets.shapes;
import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import com.joanfuentes.hintcase.Shape;
public class CircularShape extends Shape {
private static final float DEFAULT_MIN_RADIUS = 50;
private static final float DEFAULT_MAX_RADIUS = 10000;
private float minRadius = DEFAULT_MIN_RADIUS;
private float maxRadius = DEFAULT_MAX_RADIUS;
private float currentRadius = DEFAULT_MAX_RADIUS;
public float getMinRadius() {
return minRadius;
}
public float getMaxRadius() {
return maxRadius;
}
public float getCurrentRadius() {
return currentRadius;
}
public void setCurrentRadius(float currentRadius) {
this.currentRadius = currentRadius;
}
@Override
public void setMinimumValue() {
currentRadius = minRadius;
}
@Override
public void setShapeInfo(View targetView, ViewGroup parent, int offset, Context context) {
if (targetView != null) {
minRadius = (Math.max(targetView.getMeasuredWidth(),targetView.getMeasuredHeight()) / 2) + offset;
maxRadius = Math.max(parent.getHeight(), parent.getWidth());
int[] targetViewLocationInWindow = new int[2];
targetView.getLocationInWindow(targetViewLocationInWindow);
setCenterX(targetViewLocationInWindow[0] + targetView.getWidth() / 2);
setCenterY(targetViewLocationInWindow[1] + targetView.getHeight() / 2);
setLeft((int) (getCenterX() - minRadius));
setRight((int) (getCenterX() + minRadius));
setTop((int) (getCenterY() - minRadius));
setBottom((int) (getCenterY() + minRadius));
setWidth(minRadius * 2);
setHeight(minRadius * 2);
} else {
if (parent != null) {
minRadius = 0;
maxRadius = parent.getHeight();
setCenterX(parent.getMeasuredWidth() / 2);
setCenterY(parent.getMeasuredHeight() / 2);
setLeft(0);
setTop(0);
setRight(0);
setBottom(0);
}
}
currentRadius = maxRadius;
}
@Override
public boolean isTouchEventInsideTheHint(MotionEvent event) {
float xDelta = Math.abs(event.getRawX() - getCenterX());
float yDelta = Math.abs(event.getRawY() - getCenterY());
double distanceFromFocus = Math.sqrt(Math.pow(xDelta, 2) + Math.pow(yDelta, 2));
return distanceFromFocus <= minRadius;
}
@Override
public void draw(Canvas canvas) {
canvas.drawCircle(getCenterX(), getCenterY(), currentRadius, getShapePaint());
}
}