2012-09-19 31 views
0

創建自定義視圖並重寫它的onDraw()。使用Android,將畫布大小限制爲使用layoutparams指定的View大小

  • 不覆蓋onMeasure()畫布佔用整個屏幕 設備。
  • 覆蓋onMeasure(),將畫布重新調整爲尺寸爲 傳遞給setMeasuredDimension()。

因此,我們可以調整畫布的大小,並且必須在onMeasure()中完成。

我想重新大小我的自定義視圖在其指定的大小的畫布的LayoutParams(XML或Java)需要方法/屬性,這將返回的LayoutParams提到的尺寸參數裏面傳遞

現在setMeasuredDimension()。

  • 的getWidth()/的getHeight() - 值僅後onMeasure()

  • getLayoutParams()寬度/ getLayoutParams()的第一通設置高度 - 不知道當此值將返回getMeasuredWidth()/ getMeasuredHeight() - 返回在佈局參數中指定的大小參數,僅當它已在XML中設置時,而不是在編程上指定時才返回在佈局參數中指定的大小參數。

是否有任何其他方法出示擔保這將返回寬度已在customview OR getMeasuredWidth()的佈局PARAMS被設置&高度/ getMeasuredHeight()是正確的選擇在setMeasureDimensions通過()?

可能是重複的Android Custom View Size

+1

來自'LayoutParams'的值被髮送到'onMeasure'方法,這是你的工作,以這樣的方式覆蓋它,以反映這些值。 – Luksprog

+0

@Luksprog:是否有任何方法來查找是否設置了「fill_parent」或「wrap_content」。 – Mani

+0

@Luksprog:LayoutParams中的值只有在以XML格式設置時纔會發送到onMeasure方法,而不是以編程方式分配。 CustomView customView = new CustomView(getApplicationContext()); customView.setLayoutParams(new LayoutParams(100,100)); onMeasure()接收可用的屏幕寬度和高度。 – Mani

回答

0

貸@Luksprog他said。有了這個信息,我可以找出以下幾點:。

getLayoutParams()寬/ getLayoutParams()高度 - 可以包含以下任何一個值

  • LayoutParams.WRAP_CONTENT(其值是-2)
  • LayoutParams.MATCH_PARENT(其值是-1) 或
  • 在視圖的屬性(在XML中指定的寬度)layout_width

getMeasuredW width()/ getMeasuredHeight()(也是I/P參數給onMeasure()) - 將持有這個視圖的最大尺寸可以在PIXELS中明顯佔用。使用這些方法在鏈接到這個職位也還是你自己計算,調整畫布問題的回答來限制畫布大小,我們需要添加內部onMeasure邏輯()

因此回答我的疑問句!

0

一個解決辦法是,從活動的尺寸,並將其傳遞給視圖。

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 

metrics.widthPixels會得到你想要的寬度