2017-10-12 21 views
0

ConstraintLayout需要兩次通過才能對任意大小的視圖進行度量(尺寸爲0dp的視圖)。所以我有一個基於比率的觀點,我想測量在用戶看到視圖之前它有多大。如果這很重要,我正在做這是一個回收站的適配器。什麼到目前爲止,我已經試過如下:Android - 如何測量包裝在constraintLayout中的'任意大小'視圖?

iv.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
width = iv.getMeasuredWidth(); 
height = iv.getMeasuredHeight(); 

這裏是佈局:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/iv" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_marginLeft="11dp" 
     android:layout_marginRight="11dp" 
     android:layout_marginTop="0dp" 
     app:layout_constraintDimensionRatio="H,3:2" 
     app:layout_constraintHorizontal_bias="0.0" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     /> 
</android.support.constraint.ConstraintLayout> 

但這總是返回我1寬度和1的高度。我怎樣才能得到實際的測量結果?

我需要測量視圖的原因是構建一個url。這裏有一個例子網址,我需要:

mywebsiteAtImgix.com/img/books/20170316171929_6b1c02a5.jpg?auto=compress&dpr=1&fit=clip&ixlib=java-1.1.1&q=75&w=1&h=1 

更多信息: 我使用的是一家名爲imgix他們擴展我爲我的所有圖像。這非常快,他們緩存等,所以它對網頁圖像很有用。
無論如何,請注意查詢參數的寬度稱爲「w」和高度「h」。現在他們進來作爲1但非約束佈局圖像我測量時,我得到的尺寸確定,從imgix返回的圖像是一個很好的大小。如果我使用1和1作爲尺寸,它會將原始圖像帶回原始圖像(2mb至5mb +)。我需要從constraintLayout中獲取維度,以便我可以正確地構造URL。希望這可以解決問題。

+0

不,我知道寬度和高度尺寸後插入drawable。我實際上正在做一個網絡電話後,我cinstruct的形象的網址。但是這個url需要圖片的高度和寬度。它是一家名爲imgix – j2emanue

+0

的公司,我只需要一種方法來測量約束佈局,以便用戶看到它的用戶 – j2emanue

+0

感謝您的跟進。我更新了我的問題,所以你可以看到爲什麼我需要它。基本上。我需要使用視圖的高度和寬度來構建網址。那麼imgix公司會爲我提供精確的寬度和高度的圖像。 android不會縮放任何東西。這些圖像非常脆,而且速度很快。 – j2emanue

回答

1

您可以使用ViewTreeObserver.OnPreDrawListener在佈局顯示給用戶之前直接獲取圖像的邊界。

onPreDraw

布爾onPreDraw()

回調方法當視圖樹即將被吸引到被調用。此時,樹中的所有視圖都被測量並給出一幀。客戶可以使用它來調整它們的滾動範圍,甚至可以在繪圖之前請求新的佈局。

+0

其工作。我真的擔心它不會與constraintLayout任何大小的視圖。謝謝! – j2emanue

相關問題