画布不会在自定义视图中绘制

时间:2012-09-04 10:20:55

标签: 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) {
        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 包含的不仅仅是绘制一个圆圈。我需要将其设为自定义视图。

2 个答案:

答案 0 :(得分:28)

您的onDraw方法永远不会被调用,您需要在自定义视图的构造函数上调用setWillNotDraw(false)才能实际调用onDraw。

如Android SDK所述:

  

如果此视图本身不进行任何绘制,请将此标志设置为allow   进一步优化。默认情况下,此标志未在View上设置,但是   可以在某些View子类(如ViewGroup)上设置。通常,如果   你重写onDraw(android.graphics.Canvas)你应该清除它   标志。

答案 1 :(得分:0)

您的this.draw()方法在哪里?

这应该最终确定:

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