Android 画布不在自定义视图中绘制
我创建了一个自定义视图CircleView,如下所示:Android 画布不在自定义视图中绘制,android,android-canvas,android-custom-view,Android,Android Canvas,Android Custom View,我创建了一个自定义视图CircleView,如下所示: public class CircleView extends LinearLayout { Paint paint1; public CircleView(Context context) { super(context); init(); } public CircleView(Context context, AttributeSet attrs) {
public class CircleView extends LinearLayout {
Paint paint1;
public CircleView(Context context) {
super(context);
init();
}
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void init() {
paint1 = new Paint();
paint1.setColor(Color.RED);
}
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
canvas.drawCircle(50, 50, 25, paint1);
this.draw(canvas);
}
}
然后我将其包含在活动的布局根目录中
:
然而,什么也没有画出来
- 我是否实现了自定义视图
- 还是我使用自定义视图的方式
- CircleView和MyActivity都在同一个包中:
com.turkidroid.test
- 在
方法中,我尝试包括onDraw()
并对其进行注释super.onDraw()
- 我知道我可以用更简单的方法画一个圆,但我的CircleView包含的不仅仅是画一个圆。我需要将其设置为自定义视图
你的
this.draw()方法在哪里
这应该起到决定性的作用:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(50, 50, 25, paint1);
//this.draw(canvas); where is this method?
}
在我将方法添加到构造函数后,它抛出java.lang.StackOverflowerError
!有什么想法吗?在我从我的代码中删除super.onDraw()
后,你的建议很有魅力。谢谢我不确定它是什么,我的super.ondraw调用丢失了,上面的标志也被设置为默认值,但是在加入这两个魔术之后发生了^_^我想投更多的一票。。。这对于自定义视图来说是一个可怕的问题…this.draw()
就是这个方法。还是不行!在我将setWillNotDraw(false)
添加到构造函数之后,它确实工作了!我不知道为什么!如果需要自定义视图,则应始终从视图扩展,而不是从线性布局扩展,除非确实需要特定的行为。
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(50, 50, 25, paint1);
//this.draw(canvas); where is this method?
}