2011-09-05 68 views
1

我已经创建了RelativeLayout的子项。 在它的构造我叫:Android:在画布和视图上绘制(无位图)

public CanvasHolder(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     layoutInflater.inflate(R.layout.canvas_holder, this);  
     this.draw(new Canvas()); 
    } 

,然后覆盖方法的onDraw():

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     black.setARGB(255, 0, 0, 0); 
     black.setAntiAlias(true); 
     int halfWidth = this.getWidth()/2; 
     int height = this.getHeight(); 
     canvas.drawLine(0, 0, halfWidth, height, black); 
    } 

没有线已经出现在视图。 此外,我试图不要调用“this.draw()”,但没有发生任何事情。

我发现halfWidth和height等于0.为什么?

P.S.即使静态设置宽度和高度,也不会改变。 如果你不介意的话,看看这个示例应用程序:为什么没有绘制? http://androidforums.com/attachment.php?attachmentid=21715&stc=1&d=1315232946

+0

也许在你的布局已高度和宽度设置为wrap_content?尝试将其更改为fill_parent或其他类似的东西。 – Joru

+0

不,我设置了160px和220px的静态值。 – QuickNick

+0

这可能是因为你在呼唤新的Canvas() - 它实际上没有连接到视图。如果你想创建一个视图,请看一下SurfaceView的例子。 – Joru

回答

0

我发现不平凡的解决方案。我通过带有1个参数的构造函数来引入视图。然后我在布局中插入自定义视图,并在需要时调用invalidate()。

0

你覆盖了onMeasure?下面是我的 - 你可能会发现,这个被称为几次而视图加载,有时用0值:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec); 

    if (parentHeight > 0) { 
     this.setMeasuredDimension(parentWidth, parentHeight); 
     // ... other stuff ... 
    } 
} 
+0

对不起。没有改变。我试图从活动canvasHolder.draw致电(新的Canvas())10秒之后,但没有被吸引。 – QuickNick