2

私のカスタム View .xml では、幅と高さを として定義しましw = 600dp , h = 700dpた。ビューが描画された後に getMeasuredHeight() / getMeasuredWidth() が幅と高さの値を与えることを知っています.xmlファイルで指定したものとは異なる場合があります。ビューが実際にレイアウトに描画される前に取得する回避策getMeasuredHeight()と値がありますgetMeasuredWidth()onMeasure()?を使用せずに

dpまた、異なる画面で変更されたサイズを計算する方法は? エミュレーターで実行すると、私のように600h*700wに変換され300*300ます。

4

2 に答える 2

1

onSizeChanged()描画時にビューの高さと幅を取得するようにオーバーライドできます。以下を参照してください。

  @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    mWidth = w;
    mHeight = h;
    super.onSizeChanged(w, h, oldw, oldh);
    Log.d(TAG, "onSizeChanged: " + " width: " + w + " height: " + h + " oldw " + oldw + " oldh " + oldh);
}

dp をピクセルに変換するには、次のコードを使用できます。

   sizeInPixels = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
            sizeInDp, getResources().getDisplayMetrics());
于 2015-07-21T20:36:01.857 に答える