package pt.chambino.p.pulse.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class PulseView extends View {
public PulseView(Context context) {
super(context);
init();
}
public PulseView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public PulseView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private double[] pulse;
private int gridSize = 100;
private int gridStep = 5;
private Paint pulsePaint;
private Paint zeroPaint;
private Paint gridPaint;
private void init() {
setNoPulse();
setBackgroundColor(Color.DKGRAY);
pulsePaint = initPulsePaint();
zeroPaint = initZeroPaint();
gridPaint = initGridPaint();
}
private Paint initPulsePaint() {
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.RED);
p.setStrokeWidth(4);
return p;
}
private Paint initZeroPaint() {
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.LTGRAY);
p.setStrokeWidth(4);
return p;
}
private Paint initGridPaint() {
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.LTGRAY);
p.setStrokeWidth(1);
return p;
}
public double[] getPulse() {
return pulse;
}
public void setPulse(final double[] pulse) {
this.pulse = pulse;
invalidate();
}
public void setNoPulse() {
setPulse(new double[0]);
}
public int getGridSize() {
return gridSize;
}
public void setGridSize(int gridSize) {
this.gridSize = gridSize;
invalidate();
}
public int getGridStep() {
return gridStep;
}
public void setGridStep(int gridStep) {
this.gridStep = gridStep;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
// vertical grid lines
for (int i = 0; i < gridSize; i += gridStep) {
canvas.drawLine(x(i), 0, x(i), getHeight(), gridPaint);
}
// vertical and horizontal zero lines
canvas.drawLine(2, 0, 2, getHeight(), zeroPaint);
canvas.drawLine(0, y(0), getWidth(), y(0), zeroPaint);
// pulse signal
for (int i = 1; i < pulse.length; i++) {
canvas.drawLine(x(i-1), y(pulse[i-1]), x(i), y(pulse[i]), pulsePaint);
}
}
private float x(int x) {
return x * getWidth() / (gridSize - 1);
}
private float y(double y) {
return (float)(getHeight() / 2. - y * getHeight() / 3.);
}
}