2011-01-22 3 views
0

J'essaie de créer un graphique en faisant un graphique en utilisant les valeurs d'entrée de 2 champs EditText. Le programme devrait utiliser cette entrée pour tracer une ligne depuis le centre d'un axe jusqu'au point spécifié par l'information. J'ai un bouton qui chaque fois qu'il est cliqué devrait faire une nouvelle ligne au point spécifié (donc il peut y avoir plus d'une ligne) J'ai créé une vue personnalisée pour tenir l'axe, mais qui utilise sa méthode onDraw, évidemment, donc Je ne peux pas l'utiliser aussi pour dessiner la nouvelle ligne.Dessin onClick in Android

Voici le code de mon point de vue personnalisé:

package android.physicsengine; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View; 

public class AxisDrawing extends View{ 

public AxisDrawing(Context context){ 

    super(context); 
} 
public AxisDrawing(Context context, AttributeSet attrs){ 

    super(context, attrs); 

} 
public AxisDrawing(Context context, AttributeSet attrs, int defStyle){ 

    super(context, attrs, defStyle); 
} 

@Override 
protected void onDraw(Canvas canvas){ 
    canvas.drawColor(Color.BLACK); 
    Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    linePaint.setColor(Color.RED); 
    canvas.drawLine(canvas.getWidth()/2, canvas.getHeight()/2-200,  canvas.getWidth()/2 ,canvas.getHeight()/2+100, linePaint); 
    canvas.drawLine(canvas.getWidth()/2-150, canvas.getHeight()/2-75, canvas.getWidth()/2+150 ,canvas.getHeight()/2-75, linePaint); 
} 
} 

Répondre

1

Si votre classe de vue personnalisée est définie dans l'activité, alors il est une classe interne de cette activité et a accès à des variables et des tableaux qui sont définis sur le niveau d'activité.

Chaque fois que l'utilisateur clique sur le bouton, vous devez traiter et stocker les informations dans ces variables ou tableaux communs auxquels onDraw peut accéder et en calculer la ligne suivante ou le graphique entier. Si votre vue personnalisée est une classe séparée, alors vous devez transmettre les données, une façon de le faire est d'utiliser varibales statique ..

pour rendre la méthode onDraw() dessiner à nouveau votre graphique, vous devez indiquer:

myCustomView.invalidate();

dans l'événement de clic de bouton, juste après avoir défini les nouvelles données pour le graphique.

0

Vous avez simplement besoin de définir les données dans la vue custum (Globally) et d'appeler invalidate qui va redessiner la vue.

importandroid.content.Context; 
importandroid.graphics.Canvas; 
importandroid.graphics.Color; 
importandroid.graphics.Paint; 
importandroid.util.AttributeSet; 
importandroid.view.View; 


@Override 
protectedvoidonDraw(Canvascanvas 
{ 

    canvas.drawColor(Color.BLACK); 
     PaintlinePaint=newPaint(Paint.ANTI_ALIAS_FLAG); 
    linePaint.setColor(Color.RED); 
    canvas.drawLine(data,data,getWidtt()-data,getHeight()-data,linePaint); 

    //you can also pplaceinvalidate() here which will recursively redraw the canvas in aloop 

} 

publicvoidsetData(intdata) 
{ 
    this.data=data; 
    invalidate(); 
} 
}