2011-01-22 12 views
0

2つのEditTextフィールドのユーザー入力値を使ってグラフを作成しようとしています。プログラムは、この入力を使用して、軸の中心から情報によって指定された点まで線を引く必要があります。私はボタンをクリックするたびに、指定されたポイントに新しい行を作成する必要があります(複数行あります)。軸を保持するカスタムビューを作成しましたが、そのonDrawメソッドを使用しています。私はそれを使って新しい行を描くこともできません。ここでAndroidでonClickを描く

は私のカスタムビューのコードです:

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

答えて

1

カスタムビュークラスが活動中で定義されている場合、それはその活動の内部クラスであると定義された変数や配列へのアクセスを持っています活動レベルで

ユーザーがボタンをクリックするたびに、onDrawがアクセスできる共通の変数または配列に情報を処理して格納し、次の行またはグラフ全体を計算する必要があります。カスタムビューが別のクラスの場合は、データを渡す必要があります。静的な変数を使用する方法もあります。

onDraw()メソッドを使用して、グラフを描画して再び描画する必要があります。

myCustomView.invalidate();

ボタンのクリックイベントでは、グラフの新しいデータを設定した直後です。

0

データをCustumビュー(グローバル)に設定するだけで、ビューを再描画するinvalidateを呼び出すだけで済みます。

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