我正在尝试使用来自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);
}
}
答案 0 :(得分:1)
如果您在活动中定义了自定义视图类,那么它就是该活动的内部类,并且可以访问在活动级别定义的变量和数组。
每次用户点击按钮时,您都应该处理信息并将其存储到onDraw可以访问的公共变量或数组中,并从中计算下一行或整个图。如果您的自定义视图是一个单独的类,那么您需要传递数据,一种方法是使用静态varibales ..
使onDraw()方法再次绘制您需要说明的图形:
myCustomView.invalidate();
在为图表设置新数据之后,在按钮单击事件中。
答案 1 :(得分:0)
您只需在自定义视图中设置数据(全局)并调用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();
}
}