在Android中绘制onClick

在Android中绘制onClick,android,button,canvas,ondraw,Android,Button,Canvas,Ondraw,我正在尝试制作一个程序,该程序使用来自2个EditText字段的用户输入值生成图形。程序应使用此输入从轴的中心到信息指定的点绘制一条线。我有一个按钮,每次单击它都应该在指定的点上画一条新线(因此可以有多条线)。我已经创建了一个自定义视图来固定轴,但是它使用了onDraw方法,显然,因此我不能使用它来绘制新线 以下是我的自定义视图的代码: package android.physicsengine; import android.content.Context; import android.g

我正在尝试制作一个程序,该程序使用来自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);
}
}

如果自定义视图类是在活动中定义的,则它是该活动的内部类,并且可以访问在活动级别上定义的变量和数组

每次用户单击按钮时,您都应该将信息处理并存储到onDraw可以访问的这些公共变量或数组中,并从中计算下一行或整个图形。如果自定义视图是一个单独的类,则需要传递数据,一种方法是使用静态变量包

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

myCustomView.invalidate()


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

您只需在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();
}
}