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

lineToの代わりにquadToまたはcubicToを使用することもできます。

グラフにリアルタイムのアニメーション効果を持たせたい場合(つまり、データが右に来るときに左にスライドする場合)、有名な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 に答える