2011-09-05 93 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