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