15

我像这样创建了一个自定义视图 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包含的不仅仅是画一个圆圈。我需要将其设为自定义视图。
4

2 回答 2

29

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

如 Android SDK 所述:

如果此视图自己不进行任何绘图,请设置此标志以允许进一步优化。默认情况下,该标志未在 View 上设置,但可以在某些 View 子类上设置,例如 ViewGroup。通常,如果您覆盖 onDraw(android.graphics.Canvas) 您应该清除此标志。

于 2012-09-04T10:41:38.900 回答
0

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

这应该绝对有效:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);         
    canvas.drawCircle(50, 50, 25, paint1);
    //this.draw(canvas);  where is this method?
}
于 2012-09-04T11:23:55.200 回答