2017-10-12 8 views
0

ConstraintLayoutは、任意のサイズ(0ディメンションのディメンションのビュー)になり得るビューに対して、自身を測定する前に2つのパスが必要です。だから、私は比率ベースのビューを持っていると私はビューがユーザーに見える前になることがどのくらい大きなものかを嘲笑したい。私はこれが重要であれば、これはリサイクルのためのアダプタであるとしています。私は、次のされ、これまでに試してみました: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を構築することです。ここで私は必要な例の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 

MORE INFO:私は会社と呼ばれるimgixを使用していますが、彼らは私のためにすべての私の画像を拡大縮小 。非常に速く、それらはウェブイメージのために有用なのでキャッシュする。
とにかく、クエリパラメータの幅が「w」、高さが「h」であることに注意してください。今、彼らは1として来ているが、私はそれを測定するときにnon constraintslayoutイメージビューのために私は大丈夫とimgixから返されたイメージは良いサイズです。私が次元のために1と1を使用すると、私は非常に大きい(2MBから5MB +)元のイメージを返します。私は適切にURLを構築することができるようにconstraintLayoutから次元を取得する必要があります。これは物事をクリアすることを望む。

+0

いいえ、私は幅と高さの寸法を知ってからdrawableを挿入します。私は実際に私は画像のURLをcinstruct後にWeb呼び出しをしています。しかし、そのURLは画像の高さと幅が必要です。その会社imgixと呼ばれる – j2emanue

+0

私はちょうどユーザが見た制約レイアウトを測定する方法が必要です – j2emanue

+0

フォローアップありがとう。なぜ私はそれが必要なのか分かるように質問を更新しました。基本的に 。私はビューの高さと幅を持つURLを構築する必要があります。 imgix社は正確な幅と高さの画像を私に提供します。アンドロイドは何もスケールしません。画像は非常に鮮明であり、取得するのが速いです。 – j2emanue

答えて

1

ViewTreeObserver.OnPreDrawListenerを使用すると、レイアウトがユーザーに表示される直前に画像の境界線を直接取得できます。ビューツリーが描画されようとしているとき

onPreDraw

ブールonPreDraw()

コールバックメソッドが呼び出されます。この時点で、ツリー内のすべてのビューが測定され、フレームが与えられています。クライアントはこれを使用してスクロール範囲を調整したり、描画が行われる前に新しいレイアウトをリクエストしたりすることもできます。

+0

その作業。私は実際には、どのようなサイズのビューでもconstraintLayoutでは動作しないと懸念していました。ありがとう! – j2emanue

関連する問題