ビュー (ViewGroups を含む) がそれ自体を描画する必要があるたびに、そのディメンションを取得するために onMeasure メソッドが呼び出されます。その後、描画する場所の位置を取得するために onLayout が呼び出されます。draw メソッドは onMeasure および onLayout の後に呼び出されるため、これは発生しませんこちらを参照してください。onMeasure を合計すると寸法が計算され、onLayout が位置を設定し、最後に onDraw がレンダリングを行います。したがって、onMeasure を使用して目的のディメンションを設定することをお勧めします。たとえば、これは子ビューにサイズが正確に 300 x 150 ピクセルであることを伝える onMeasure メソッドです。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSpec;
int heightSpec;
widthSpec = MeasureSpec.makeMeasureSpec(300, MeasureSpec.EXACTLY);
heightSpec = MeasureSpec.makeMeasureSpec(150, MeasureSpec.EXACTLY);
llTopBar.measure(widthSpec, heightSpec); //<-- llTopBar is the child...
super.onMeasure(widthMeasureSpec, heightMeasureSpec); //<--This is important
}
ピクセルの代わりにディップを使用したい場合は、変換する必要がありますここを参照してください。
使用可能なスペースよりも大きなサイズの子を測定できますが、クリッピングやその他の要因により、期待どおりの結果が得られない場合があります (たとえば、ViewGroup が別の ViewGroup にある場合)。
あなたの質問から、左から右にスライドするものを構築していることがわかります。おそらく、slidedrawer のソース コードが参考になるでしょう。
お役に立てれば...