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?
Asked
Active
Viewed 7,341 times
7
-
how you got this working can please share your solution ? – Hunt Jun 30 '12 at 20:20
-
1Can you share your Idea how to complete it ? – Ashok Domadiya Jul 23 '12 at 07:15
1 Answers
11
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.

aberaud
- 909
- 1
- 11
- 24
-
2
-
How can remove older drawing...as here both drawing overlapping to each other...any suggestion? – CoDe Dec 09 '13 at 10:38
-