2012-09-22 16 views
11

Voglio disegnare un grafico come mostrato nell'immagine allegata.Come disegnare il grafico in Android?

Ho già provato da aChartEngine ma non funziona correttamente.

enter image description here

+0

http://stackoverflow.com/questions/424752/any-good-graphing-packages-for-android potrebbe aiutarti ... – nKandel

risposta

9

È possibile creare uno SurfaceView, in cui è possibile disegnare su un Canvas nel metodo onDraw(). Per disegnare il grafico, è possibile utilizzare la classe Path ed è i metodi moveTo() e lineTo(). Per modificare l'aspetto delle linee, utilizzare la classe Paint. Quindi utilizzare il metodo Canvases drawPath(), che accetta un oggetto Path e un oggetto Paint. Penso che sia un po 'più facile iniziare con OpenGl.

Some tutorial

Aggiornamento: ho trovato un pre tty bella libreria, che sembra facile da usare: MPAndroidChart

+0

Possiamo usare MPAndroidChat per tracciare anche relazioni matematiche come Circle? Lo sto chiedendo perché AChartEngine non supporta quello –

+0

Non ho usato MPAndroidChart, l'ho visto solo su github, e dalla bella presentazione, e la documentazione, mi è sembrata un'ottima scelta per i grafici. È meglio chiederlo allo sviluppatore, lui/lei potrebbe essere in grado di aiutarti. –

+0

@ bali182..Grazie –

1

ne dite di provare OpenGL ES?

è possibile creare un GraphView che sarà estende GLSurfaceView

esempio code-

public class GraphView extends GLSurfaceView { 

private Renderer renderer; 

public GraphView(Context context) { 
    super(context); 
    renderer = new GraphRenderer(); 
    setRenderer(renderer); 
} 
} 

E il tuo GraphRender

ublic class GraphRenderer implements Renderer { 

public void onDrawFrame(GL10 gl) { 
gl.glMatrixMode(GL10.GL_MODELVIEW); 
gl.glLoadIdentity(); 

GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 1.0f); 
gl.glColor4f(1, 0, 0, .5f); 
} 

public void onSurfaceChanged(GL10 gl, int width, int height) { 
gl.glViewport(0, 0, width, height); 

float ratio = (float) width/height; 
gl.glMatrixMode(GL10.GL_PROJECTION); 
gl.glLoadIdentity(); 
gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); 
} 

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 

} 

private void drawGraph(GL10 gl) { 
gl.glLineWidth(1.0f); 

// put your code here .. 


} 

public static int loadShader(int type, String shaderCode) { 
int shader = GLES20.glCreateShader(type); 
GLES20.glShaderSource(shader, shaderCode); 
GLES20.glCompileShader(shader); 
return shader; 
} 

}

Si può provare in questo modo.

+1

sì, ma come io può impostare il tempo sull'asse y di 0,15 min diffe? –

Problemi correlati