带圆角和多种颜色的进度条

时间:2017-11-21 20:07:19

标签: android android-progressbar

我已经阅读了类似的问题herehere,如果您只想展示一个带圆角的单一进度条,这是很好的解决方案,但在我的情况下,我想展示一个多个"子进展"颜色如下图所示:

progress bar

到目前为止,我所做的是编写一个类似于answer的LinearGradient实现,但它在角落里看起来是平方的。

我如何取得这个进展?

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我发现这个类PaintDrawable可以设置为任何View的背景,令人惊讶的是我可以为这个Drawable设置一个Shape,所以如果我使用RoudRectShape它似乎舍入为我希望它是,我的最终代码如下:

        // mRatios is a View
        ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
            @Override
            public Shader resize(int i, int i1) {
                LinearGradient lg = new LinearGradient(0, 0, mRatios.getWidth(), 0,
                        barColorsArray,
                        barRatiosArray,
                        Shader.TileMode.REPEAT);

                return lg;
            }
        };
        PaintDrawable paintDrawable = new PaintDrawable();

        // not sure how to calculate the values here, but it works with these constants in my case
        paintDrawable.setShape(new RoundRectShape(new float[]{100,100,100,100,100,100,100,100}, null, null));
        paintDrawable.setShaderFactory(sf);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
            mRatios.setBackgroundDrawable(paintDrawable);
        } else {
            mRatios.setBackground(paintDrawable);
        }