帆布不自定义视图中绘制(Canvas does not draw in Custom View)

2019-06-27 18:32发布

我创建了一个自定义视图CircleView是这样的:

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);  
    }
}

然后我把它在我的Activity的布局根<RelativeLayout>

  <com.turkidroid.test.CircleView
      android:id="@+id/circle_view"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" 
      android:layout_centerInParent="true"  />  

然而,什么也没有拉!

  • 我是否执行自定义视图吗?
  • 或者是怎么使用的自定义视图?

一些信息:

  • 无论CircleView和MyActivity是在同一个包: com.turkidroid.test
  • onDraw()方法,我试图包括super.onDraw()和评论它。
  • 我知道我可以画一个圆用更简单的方法,但我CircleView 包含比画一个圆圈更多。 我要使它成为一个自定义视图。

Answer 1:

你的onDraw方法不会被调用,你需要为了得到的onDraw居然叫调用setWillNotDraw(假)上的自定义视图的构造。

如前所述在Android SDK:

如果这种观点没有做对自己的任何绘图,设置该标志以允许进一步优化。 默认情况下,这个标志没有被设置上查看,但也可以在某些View子类,如设定的ViewGroup。 通常情况下,如果重写的onDraw(android.graphics.Canvas),你应该清除该标志。



Answer 2:

哪里是你的this.draw()方法?

这应该明确工作:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);         
    canvas.drawCircle(50, 50, 25, paint1);
    //this.draw(canvas);  where is this method?
}


文章来源: Canvas does not draw in Custom View