在带有 9 个补丁的 progressBar 中使用 'small' 值看起来很糟糕
Using 'small' values in progressBar with 9 patch looks bad
我正在使用 libGDX
进度条。我用下一个代码创建它:
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 补丁图像)时它看起来很糟糕:
对如何处理这个问题有什么想法吗?
您正在将 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()
.
我正在使用 libGDX
进度条。我用下一个代码创建它:
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 补丁图像)时它看起来很糟糕:
对如何处理这个问题有什么想法吗?
您正在将 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()
.