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 可以访问的这些公共变量或数组中,并从中计算下一行或整个图形。如果您的自定义视图是一个单独的类,那么您需要传递数据,一种方法是使用静态变量..

要使 onDraw() 方法再次绘制您的图形,您需要说明:

myCustomView.invalidate();

在按钮单击事件中,就在您为图形设置新数据之后。

于 2011-01-22T16:41:30.483 回答
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();
}
}
于 2013-07-16T05:24:05.937 回答