7

我想制作一个实时显示心电图的应用程序。这意味着我想测量心脏位并希望在我的应用程序中以图表形式显示比特率。但我想画心电图。我已经浏览了许多示例图形代码,但没有任何线索可以绘制心电图。有没有来自任何身体的线索?

4

1 回答 1

11

对于这个特定的应用程序,您可能希望使用 Path 和 SurfaceView“手动”绘制图形。

在初始化期间准备好一个 Paint 实例:

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

当您需要更新图形时,清除场景并构建线路路径(根据您的需要进行调整):

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);

您也可以使用 quadTo 或cubicTo 而不是 lineTo。

如果您希望您的图表具有实时动画效果(即向左滑动而数据来自右侧),您可以使用与著名的 LunarLander 示例类似的方式在 SurfaceView 上绘制(以下代码是简化版本):

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); 
            }
        }
    }
}

其中 mSurfaceHolder 是通过调用获得的yourSurfaceView.getHolder()doDraw是你调用的地方canvas.drawPath()和你所有的绘图代码。

于 2011-05-18T08:37:13.810 回答