0

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

カスタムビューのコードは次のとおりです。

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

2 に答える 2

1

カスタムビュークラスがアクティビティで定義されている場合、それはそのアクティビティの内部クラスであり、アクティビティレベルで定義されている変数と配列にアクセスできます。

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

onDraw()メソッドにグラフを再度描画させるには、次のように記述する必要があります。

myCustomView.invalidate();

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

于 2011-01-22T16:41:30.483 に答える
0

custumビュー(Globally)でデータを設定し、呼び出し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();
}
}
于 2013-07-16T05:24:05.937 に答える