使用' small'进度值中的值9补丁看起来很糟糕

时间:2016-05-25 19:42:21

标签: java libgdx progress-bar nine-patch

我正在使用libGDX ProgressBar。我用下一个代码创建它:

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,这就是它的外观:[1]

但是当我设置一个小值1/30(比基本的9个补丁图像小)时,它看起来很糟糕:

任何想法如何处理这个问题?

1 个答案:

答案 0 :(得分: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()