如何从另一个类更改onDraw中的语句

时间:2015-04-18 14:03:51

标签: android ondraw

我创建了一个名为Draw的自定义视图,其中包含onDraw(Canvas)

onDraw()

public void onDraw(Canvas canvas) {
    canvas.drawLine(1419,283,1347,243,paint);
    canvas.drawLine(1347,243,1327,291, paint);
}

我想从另一个班级更改onDraw()。我想添加更多drawLine()并更改其中的值。

简而言之,你如何在另一个类的onDraw()类中覆盖(我不知道这是否是正确的术语){/ 1}}?

顺便说一句,我正在使用一个视图和几个按钮(使用overrode Draw实现)使用该视图。

2 个答案:

答案 0 :(得分:2)

制作Line的自定义类怎么样?它应该包含x_start,y_start,x_stop,y_stop。

public class Line {
    public float x_start, y_start, x_stop, y_stop;

    public Line(float x_start, float y_start, float x_stop, float y_stop) {
        this.x_start = x_start;
        this.y_start = y_start;
        this.x_stop = x_stop;
        this.y_stop = y_stop;
    }
}

在视图中创建一个ArrayList行,并从外部世界访问它。

public ArrayList<Line> lines;

现在在onDraw

for(Line : lines){
  canvas.drawLine(line.x_start, line.y_start, line.x_stop, line.y_stop, paint);
}

请注意,必须为要重绘的视图调用invalidate()

编辑:为按钮演示添加一些代码

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             // This guy adds two lines
             someView.lines.add(new Line(1, 2, 3, 4));
             someView.lines.add(new Line(4, 5, 6, 7));
             someView.invalidate();
        }
    });
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             // This guy adds 3 lines
             someView.lines.add(new Line(1, 2, 3, 4));
             someView.lines.add(new Line(4, 5, 6, 7));
             someView.lines.add(new Line(8, 9, 10, 11));
             someView.invalidate();
        }
    });
    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             // This guy removes them all
             someView.lines.clear();
             someView.invalidate();
        }
    });

答案 1 :(得分:1)

这是你可以做的事情

在自定义类中有一个arraylist说“lines”

ArraList<Line> lines = new ArrayList<Line>();

现在Line是存储Line坐标的类。

Class Line {
   int x_start,y_start,x_stop,y_stop;
 }

在onDraw方法视图中如下绘制这些行。 for(Line line : lines){ canvas.drawLine(line.x_start, line.y_start, line.x_stop, line.y_stop, paint); }

现在这里是主要部分 创建方法drawLines如下

public void drawLines(ArrayList<Line> lines) {
    this.lines = lines;
    invaliadte();//this will call ondraw again
    // can also call postInvalidate()

}

现在你只需要调用customView.drawLines(lines);并完成..

希望这能解决您的问题