2012-09-29 61 views
0

我有一個擴展了View的類。我的視圖中的畫布設置爲全屏尺寸,而不是查看尺寸...爲什麼?

儘管視圖被設置爲具有特定尺寸的RelativeLayout的子視圖,但View的畫布報告它是1280寬(與設備一樣寬)。

我想了解我需要做什麼來使畫布受其視圖的尺寸的限制(如常識所要求的那樣)。

好奇我俯瞰什麼......這裏是相關的代碼片段...

dv = new DrawView(this, getWindowManager()); 
    dv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

    //this wrapper is 500x500 
    ((RelativeLayout)findViewById(R.id.drawWrapper)).addView(dv); 
    L.log("DRAWVIEW WIDTH = " + dv.getWidth()); //this reports 0... why? 

內drawView函數...

@Override 
public void onDraw(Canvas canvas) { 

    L.log("CANVAS WIDTH ON DRAW = " + canvas.getWidth()); //this always reports 1280 on xoom 
    this.canvas = canvas; 
    drawElementsOntoCanvas(canvas, true, false); 
    ...  
} 

是否有我忽視的東西或者是視圖中的畫布始終是整個屏幕的寬度和高度?

的XML爲相對佈局:

  <RelativeLayout 
      android:id="@+id/drawWrapper" 
      android:layout_width="500px" 
     android:layout_height="500px"   
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="50dip" 
     android:clipChildren="true" 
     android:background="@drawable/cut_out_frame"   
     /> 
+0

我認爲你需要看看onMeasure,你有沒有在Android Dev上看到自定義視圖的文檔? – Neil

+0

直到佈局完成後,dv.getWidth()纔會爲零。請參閱http://developer.android.com/reference/android/view/ViewTreeObserver.html。請爲RelativeLayout顯示XML。 – Simon

+0

@Simon,在編輯中加入xml ... –

回答

0

啊,現在我把它:)

你有clipChildren =真實的,但適用於含佈局。子視圖可以繪製到父級邊界之外,但繪圖將簡單地剪裁到父級維度。

看來,在這裏,您正在使用的窗口管理器來構建你的drawView函數

dv = new DrawView(this, getWindowManager()); 
dv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

沒有看到構造函數中,我猜測,隨後setLayoutParams使用FILL_PARENT,即整個屏幕。

如果我是你,我會爲你的DrawView實現標準的構造函數,然後將它放在佈局XML中。這是「Android」的方式。您也可以重寫onMeasure()以跟蹤DrawView的大小,將x和y存儲在內部字段中,您可以使用它來進行所需的任何縮放。這樣,如果您的佈局每改變一次(方向更改,不同的分辨率支持,新版本),您的代碼都不需要更改。

最後,永遠不要(除非你知道爲什麼)在佈局中使用PX。改用DIP。

+0

謝謝... px是各種企圖試圖找出問題所在的遺留問題。實際上,我將WindowManager傳遞給該DrawView,因爲它後面有一些信息,但我沒有*以任何相關方式使用它來進行配置。然後,我將dv設置爲一個childView,以XML格式顯示(它定義了尺寸)。如果我不設置剪輯,它會在整個屏幕上繪製(這不是我想要的)。奇怪的是,它報告正確的座標從父母坐的位置開始,因此,它正在履行xml的這部分內容,但是從右側開始1280! –

+0

好的請顯示您的構造函數。 AttributeSet是這裏的關鍵。它從哪裏獲得?佈局管理器提供它,因爲視圖是在layout.xml中定義的,或者是您構造的。 – Simon

相關問題