2016-12-21 9 views
0

すべて塗装onMeasure()高さの幅を決定する

私はここで奇妙な問題に直面していると私は専門家の助言が必要です。

私はカスタムビューを持っています。これは、それに沿ってポイントとテキストを描画しています。 今、私の問題は、それはそれの幅の高さはonDraw方法でカウントされます知っていません。(もちろん動的計算)。したがって、このシナリオでは、 setMeasuredDimension(parentWidth, parentHeight)の処理方法があります。あなたは高さと幅を知らない、それはonDrawで計算されるに依存するテキストの長さ助けてください。

答えて

-1

onMeasure()で[Paint.getTextWidths()](https://developer.android.com/reference/android/graphics/Paint.html#getTextWidths(java.lang.String、float []))を使用するだけです。

ループでちょうどすべての幅

float textWidth = 0; 
float [] charsWidth = new float[text.length()]; 

int widths = mPaint.getTextWidths(text, charsWidth); 

for (int i = 0; i < widths; i++) { 
    textWidth += charsWidth[i]; 
} 

を追加し、テキストの幅を持っているので、あなたは、すべての文字の幅を取得します。

Paintオブジェクトを、適切なパラメータ、特にテキストサイズで初期化することを忘れないでください。

EDIT:テキストの幅と高さの両方が必要な場合は、代わりにPaint.getTextBounds()を使用します。

+0

テキストの 'StaticLayout'を使って、高さと幅の両方が測定されるようにします。これは' onMeasure'の中でどうやって行うのか分かりません。 – AJay

+0

@AJay私は参照してください。更新された回答を確認してください。 – Abbas

+0

ここでは 'StaticLayout'をチェックしてください。ここには複数行のテキストと' leftdrawable'のようなイメージもあります。これは簡単な仲間ではありません。 – AJay

関連する問題