2011-05-18 12 views
7

Quiero hacer una aplicación que muestre cardio gráfico en tiempo real. Eso significa que quiero medir el bit de corazón y quiero mostrar la tasa de bits en el gráfico en mi aplicación. Pero me gustaría dibujar el gráfico de cardio. He revisado muchos códigos de gráficos de muestra pero no tengo ninguna pista para dibujar un gráfico de cardio. ¿Hay alguna pista de cualquier cuerpo?Cardio graph para android

+0

¿Cómo conseguiste este funcionamiento? ¿Puedes compartir tu solución? – Hunt

+1

¿Puedes compartir tu idea sobre cómo completarla? –

Respuesta

10

Para esta aplicación específica, es posible que desee dibujar el gráfico "a mano" utilizando Path y SurfaceView.

obtener una instancia de pintura preparada durante la inicialización:

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 

Cuando tenga que actualizar el gráfico, borrar la escena y construir el camino en línea (adaptar esto a sus necesidades):

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

También puede usar quadTo o cubicTo en lugar de lineTo.

Si desea que su gráfico tenga un efecto de animación en tiempo real (es decir, deslizándose hacia la izquierda mientras los datos aparecen a la derecha), puede dibujar en un SurfaceView de forma similar al ejemplo LunarLander famoso (el siguiente código es versión simplificada):

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

Dónde mSurfaceHolder se obtiene llamando yourSurfaceView.getHolder() y doDraw es donde que llaman canvas.drawPath() y todo el código de dibujo.

+0

gracias por la respuesta. –

+2

¿Lo hiciste funcionar? ¿Puedes mostrarnos tu solución final? – JPM

+0

¿Cómo se puede eliminar el dibujo anterior ... como el dibujo superpuesto entre sí ... cualquier sugerencia? – CoDe