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

iTu*_*rki 12 android android-custom-view android-canvas

我创建了一个自定义视图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);  
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将它包含在我的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"  />  
Run Code Online (Sandbox Code Playgroud)

但是,没有画出来!

  • 我是否正在实施自定义视图?
  • 或者我是如何使用自定义视图的?

一些信息:

  • CircleView和MyActivity都在同一个包中:com.turkidroid.test.
  • onDraw()方法中,我尝试包含super.onDraw()和评论它.
  • 我知道我可以使用更简单的方法绘制一个圆,但我的CircleView 包含的不仅仅是绘制一个圆.我需要将其设为自定义视图.

Ait*_*ron 28

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

如Android SDK中所述:

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