私はすぐにオブジェクトの割り当てを行わないことを学び、すべてのペイント割り当てを別のメソッドに移動したカスタムビューを持っています。onDraw()(StaticLayout)でオブジェクトの割り当てを避けますか?
スパニング可能な 'stuff'が適用されているテキストの場合は、StaticLayoutを使用する必要があります。
layoutBpm = new StaticLayout(bpmValue,
textPaintBPM, arcRadius, Layout.Alignment.ALIGN_NORMAL, 0, 1,
false);
layoutBpm.draw(canvas);
これはonDrawを使用することに意味があるように見えましたが、私はもちろんこれを避けるように警告しています。パフォーマンス上の問題を避けるために私ができることはすべてやっているので、私はこれを正しく実行しようとしています。
StaticLayoutのパラメータのいくつかが実際に何をしているのか理解できているような文書は見つかりませんでした(浮動小数点数spacingmult?float spacingadd?)が、3番目にStaticLayoutの最大幅それは私のキャンバスのサイズに関連してonMeasureからしか得ることができません。これはonMeasureやonDrawに割り当てを入れたいと思っています。どちらもそれが意味するものではありません。 onDrawにStaticLayoutを代入するのは大丈夫ですか?これを行うにはより良い方法がありますか?
これは理にかなっていると思いますが、これは非常に新しいです。何か助けてくれてありがとう。
(編集:?私はこの方法では、この割り当てを入れて、ちょうど愚かされていて、私を警告Eclipseを停止するが、文句を言わない、実際に役立つonDraw/onMeasureから呼び出すと仮定)
ありがとう、これは私に物を見る少し新しい方法を与えました。私が上記の実装をしている唯一の問題は、 'textPaint'は既に呼び出されている' onMeasure() 'に依存しています(テキストはキャンバスのサイズに従って拡大縮小されます)。' textWidth' )、私は 'createLayout()'をコンストラクタで最初に表示することはできません。私は 'onMeasure()'に置くことができますが、私はそれほど頻繁に呼び出されません。 – Anthony
実際にはテキストが大きく変化します。私が作業しているビューは実際には円形のSeekBarですが、StaticLayoutはSeekBarの進行に関連する中間のテキストに使用されます。円の周りに指をドラッグすると、その値は常に変化します。値が大きく変わっても長さは常に3桁になっているのでレイアウトは決してサイズを調整する必要がないので、StaticLayoutは大丈夫です。静的/動的レイアウトに関するドキュメントはほとんど見つからないので、これが正しいかどうかはわかりません。どんな助けにも感謝します。 – Anthony
最終的には(私は思うが)、onMeasure()を 'onSizeChanged()'に置き換えたのは、私のレイアウトのニーズが単純で、 'onMeasure()'ではなく 'createLayout Lintは何らかの理由で 'onSizeChanged()'でオブジェクトの割り当てを気にしないようですが、 'onMeasure()'ではそれを嫌いです。私はこれら両方の方法が同じ時間量と呼ばれていることを想像しています。それで、なぜそれが1つではなく他の人ではないのか分かりませんが、それは大丈夫です。私の主な関心事は、私が行った 'onDraw()'の割り当てを取り除くことでした。再度、感謝します。 – Anthony