2016-05-25 4 views
0

私はlibGDX ProgressBarを使用しています。/[1]9パッチでprogressBarの 'small'値を使用しています。

が、私は小さな値1を設定すると:私は大きな数に値を設定すると

style = new ProgressBar.ProgressBarStyle(); 
style.background = new SpriteDrawable(backgroundImage); 
NinePatch fillImage = new NinePatch(new TextureRegion(img2, 1, 1, img2.getWidth(), img2.getHeight()), 25, 26, 30, 30); 
style.knobBefore = new NinePatchDrawable(fillImage); 
style.knobBefore.setMinWidth(0); 
style.knobBefore.setRightWidth(0); 
style.knobBefore.setLeftWidth(0); 

progress = new ProgressBar(0, 30, 0.1f, false, style); 

、たとえば15のために、これは、それがどのように見えるかです:私は次のコードでそれを作成します30(より小さい基本的な9パッチのイメージ)それは悪く見えます:

どのようにこの問題を処理するためのアイデア?

答えて

0

NinePatchの幅を最小値より小さく設定しています。左右が変わらないので、NinePatchの最小幅は25 + 26 = 51pxです。これ以下であれば、誤った結果を得るでしょう。あなたの両脇が実際にお互いに押し込んでセンターに負の幅をつくっていることが理由であると信じています。 (画像では、右端が左端にあり、左端が右端にありますが、逆の中央にある可能性が高いことがわかります)。最も簡単な解決策は、プログレスバーの幅を適切な最小値に制限することですこのようなもの(進捗値が0と1の間にある場合)。

//convert min width to a ratio 
float minProgress = style.knobBefore.getMinWidth()/progressBarLength; 

float progress = Math.max(progress, minProgress); 

getMinWidth()はおそらくそれが51/52pxであると伝えます。 setMinWidth()setLeftWidht()setRightWidth()も強制しないでください。

+0

私は設定したい値ごとにチェックし、最小値に変換する必要がありますか?しかし、私は同じサイズで1/100 - > 5/100という値を持っています - 最小値 – RonTr

+0

私は 'ProgressBar'を自分で使っていませんが、実際には' NinePatch'を実行することはできません最小値よりも小さい場合は、 'setMinWidth()'を強制しないとその場合ですか?実際に0〜5%が同じになる問題がある場合は、手動でそれを少しカスタマイズすることができます。ノブを 'TextureRegionDrawable'で始めるように設定してください。そして、' progress'が上で定義した 'minProgress'であるときは' NinePatchDrawable'に切り替えてください – hamham

関連する問題