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

How to change the statements inside onDraw from another class

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

onDraw():

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

我想将 onDraw() 换成另一个 class。我想添加更多 drawLine() 并更改其中的值。

简而言之,如何从另一个 class 覆盖 Draw class 中的(我不知道这是否是正确的术语)?

顺便说一句,我正在使用一个视图和几个按钮(通过覆盖 onDraw() 实现)使用该视图。

自定义 class 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();
        }
    });

这是您可以做的

在您的自定义 class 中有一个数组列表说 "lines"

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

现在线是 class 来存储线坐标。

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);完成了..

希望这能解决您的问题