在Android中绘制onClick

时间:2011-01-22 13:16:21

标签: android button canvas ondraw

我正在尝试使用来自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);
}
}

2 个答案:

答案 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();
}
}