首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >画布不会在自定义视图中绘制

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

Stack Overflow用户
提问于 2012-09-04 10:20:55
回答 2查看 16.2K关注 0票数 15

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

代码语言:javascript
复制
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);  
    }
}

然后,我将其包含在活动的布局根<RelativeLayout>中。

代码语言:javascript
复制
  <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包含的不仅仅是画一个圆。我需要让它成为一个自定义视图。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-04 10:41:38

您的onDraw方法从未被调用过,您需要在自定义视图的构造函数上调用setWillNotDraw(false),以便实际调用onDraw

正如Android中所述:

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

票数 29
EN

Stack Overflow用户

发布于 2012-09-04 11:23:55

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

这项工作应明确地发挥作用:

代码语言:javascript
复制
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);         
    canvas.drawCircle(50, 50, 25, paint1);
    //this.draw(canvas);  where is this method?
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12261435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档