开发者

Cardio graph for android

开发者 https://www.devze.com 2023-03-07 03:09 出处:网络
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

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消