I want to make an app which shows cardio graph in real time. That means i want to measure heart bit and want to show the bit rate in graph in my application开发者_运维技巧. But i wondering to draw the cardio graph. I have gone through many sample graph codes but dint get any clue to draw cardio graph. Is there any clue from any body?
For this specific application, you may want to draw the graph "by hand" using Path and a SurfaceView.
Get a Paint instance ready during initialization:
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
paint.setColor(Color.GREEN); //Change to what you want
When you need to update the graphic, clear the scene and build the line path (adapt this to your needs) :
canvas.drawColor(Color.WHITE);
Path path = new Path();
path.moveTo(0, yourValueAt(0));
for(int sec = 1; sec < 30; sec++)
path.lineTo(sec, yourValueAt(sec));
canvas.drawPath(path, paint);
You may also use quadTo or cubicTo instead of lineTo.
If you want your graph to have a realtime animation effect (i.e. sliding to the left while data is coming on the right), you may draw on a SurfaceView in a similar way to the famous LunarLander example (following code is a simplified version):
class DrawingThread extends Thread {
@Override
public void run() {
while (running) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
doDraw(c);
}
} finally {
if (c != null) mSurfaceHolder.unlockCanvasAndPost(c);
}
synchronized (this) {
//Optional but saves battery life.
//You may compute the value to match a given max framerate..
this.wait(SOME_DELAY_IN_MS);
}
}
}
}
Where mSurfaceHolder is obtained by calling yourSurfaceView.getHolder()
and doDraw
is where
you call canvas.drawPath()
and all your drawing code.
精彩评论