我试图创建一个对象,每当我想在我的类的ondraw()函数上绘制一些东西时就可以调用它。我的代码不起作用:
//object class
public class DrawObject extends Canvas {
Paint paint = new Paint();
public void setColor(int color){
paint.setColor(color);
}
// I want to draw an arrow to instead of a line
public void drawArrow(float startPointX, float startPointY, float endPointX, float endPointY){
drawLine(startPointX, startPointY, endPointX, endPointY, paint);
// draw the rest of the arrow here
}
}
对于主类:
public class Screen extends ImageView{
Paint paint = new Paint();
public Screen(Context context){
super(context);
paint.setColor(Color.BLACK);
paint.setStyle(Style.STROKE);
}
public void onDraw(DrawObject drawObject){
//called DrawObject instead on Canvas
drawObject.drawArrow(10,10,100,100);
// I want to draw the arrow here but it is not working.
}
有人能告诉我什么是正确的方法吗?谢谢。
4条答案
按热度按时间qv7cva1a1#
我真的不明白延长期限的理由
Canvas
定义你自己的对象,除非你需要对它有特殊的控制。通常情况下,你会延伸
View
在教室里画所有的东西onDraw()
方法通过Canvas
对象,例如:dauxcl2d2#
这一点是错误的
ondarw是一个框架方法,因此只要更改方法签名,就不会调用此方法。
没有必要将canvas子类化-这不是正确的方法。
因此,在screen类中-重写标准ondraw方法:
要以编程方式触发ondraw mthod,请在screen对象上调用invalidate()。
iyr7buue3#
我会按照这些思路做一些事情:
为可绘制对象定义一个接口(以避免与android混淆)
Drawable
同学们,我叫它Paintable
)使任何需要以自定义方式绘制的类(如建议的箭头)实现
Paintable
接口和重写paint(Canvas canvas)
在那里处理你的绘图操作。维护一份
Paintable
自定义中的对象ImageView
,只需调用paint()
方法。太棒了!cyvaqqii4#
延伸
Canvas
是错误的方法,因为您得到了系统提供的画布,您必须使用它。你不能强迫android使用你的Canvas
. 相反,你可以通过Canvas
你的班级需要的时候。像这样使用