0

カスタムビューを作成し、onDraw()をオーバーライドしました。

  • onMeasure()をオーバーライドしない場合、キャンバスはデバイスの画面全体を占めます。
  • onMeasure()をオーバーライドすると、キャンバスはsetMeasuredDimension()に渡されたディメンションにサイズ変更されます。

したがって、キャンバスのサイズを確実に変更できます。これは、onMeasure()で実行する必要があります。

カスタムビューのキャンバスのサイズを、LayoutParams(XMLまたはJava)で指定されたサイズに変更したい

setMeasuredDimension()内で渡すLayoutParamsに記載されているサイズパラメータを返すメソッド/属性が必要です。

  • getWidth()/ getHeight()-値はonMeasure()の最初のパスの後にのみ設定されます

  • getLayoutParams()。width / getLayoutParams()。height-この値がいつ有効な値を返すかわからない(パラメータを設定すると、プログラムで値「-1」が返されます)

  • getMeasuredWidth()/ getMeasuredHeight()-XMLで設定されている場合にのみ、レイアウトパラメータで指定されたサイズパラメータを返します。プログラムで割り当てられている場合は返しません。

customviewのレイアウトパラメータで設定された幅と高さを返す他の保証メソッドはありますか、またはgetMeasuredWidth()/ getMeasuredHeight()がsetMeasureDimensions()で渡す正しい選択です?

Androidカスタムビューサイズと重複している可能性があります

4

2 に答える 2

0

1つの解決策は、アクティビティからディメンションを取得し、それらをビューに渡すことです。

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

metrics.widthPixels希望の幅になります

于 2012-09-19T20:11:19.733 に答える
0

彼が言ったように@Luksprogへのクレジット。この情報を持っていると、私は次のことを理解することができます:

getLayoutParams()。width / getLayoutParams()。height-以下の値のいずれかを含めることができます

  • LayoutParams.WRAP_CONTENT(値は-2)
  • LayoutParams.MATCH_PARENT(値は-1)または
  • ビューの属性で指定された幅(XML)layout_width

getMeasuredWidth()/ getMeasuredHeight()(onMeasure()へのi / pパラメーターも)-このビューの最大サイズを保持し、PIXELSで視覚的に占有できます

したがって、私自身の質問に答える:この投稿にリンクされた質問に答えられるように、これらのメソッドを使用してonMeasure()内にロジックを追加するか、キャンバスのサイズを変更するための独自の計算を行う必要があります。

于 2012-09-28T09:23:05.643 に答える