我创建了一个名为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
实现)使用该视图。
答案 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);并完成..
希望这能解决您的问题