package eu.hgross.blaubot.fingertracking;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.util.AttributeSet;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import eu.hgross.blaubot.fingertracking.model.Finger;
/**
* Shows some fingers
*
* @author Henning Gross {@literal (mail.to@henning-gross.de)}
*
*/
public class FingerField extends View {
public static final int REFRESH_INTERVAL = 15; // every x ms refresh
private volatile List<Finger> fingers = new ArrayList<Finger>();
private volatile List<Finger> lastFingers = null;
private Timer timer;
private TimerTask timerTask;
private float width, height; // cached
private ShapeDrawable finger;
public FingerField(Context context, AttributeSet as) {
super(context, as);
this.timer = new Timer();
this.timerTask = new TimerTask() {
@Override
public void run() {
if(fingers == lastFingers)
return;
postInvalidate();
}
};
finger = new ShapeDrawable(new OvalShape());
this.timer.scheduleAtFixedRate(timerTask, REFRESH_INTERVAL, REFRESH_INTERVAL);
}
protected void onDraw(Canvas canvas) {
lastFingers = fingers;
setBackgroundColor(Color.BLACK);
width = (float) getWidth();
height = (float) getHeight();
drawFingers(canvas);
}
private void drawFingers(Canvas canvas) {
for(Finger f : fingers) {
drawFinger(f, canvas);
}
}
private void drawFinger(Finger f, Canvas canvas) {
int FINGER_RADIUS = (int)width/20;
int x = (int)(width * f.getX());
int y = (int)(height * f.getY());
finger.getPaint().setColor(f.getColor());
finger.setBounds(x-FINGER_RADIUS, y-FINGER_RADIUS, x+FINGER_RADIUS, y+FINGER_RADIUS);
finger.draw(canvas);
}
public void setFingers(List<Finger> fingers) {
this.fingers = fingers;
}
}