Кардио график на андроид - PullRequest
7 голосов
/ 18 мая 2011

Я хочу сделать приложение, которое показывает график кардио в режиме реального времени.Это означает, что я хочу измерить частоту сердечных сокращений и показать график скорости в своем приложении.Но мне интересно нарисовать график кардио.Я прошел через многие примеры кодовых графиков, но я не понял, как нарисовать кардио-графикЕсть ли какая-нибудь подсказка от какого-либо тела?

1 Ответ

11 голосов
/ 18 мая 2011

Для этого конкретного приложения вы можете нарисовать график "вручную", используя 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.

Если вы хотите, чтобы ваш график имел эффект анимации в реальном времени (то есть скольжение влево, когда данные поступают справа), выможет рисовать на SurfaceView аналогично известному примеру LunarLander (следующий код является упрощенной версией):

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() и весь ваш код для рисования.

...