2016-11-07 44 views
-1

我正在尝试使用动态百分比标签在视图中和角落中设置不同的颜色(如图)。查看具有动态多颜色和边角的背景

enter image description here

如果只设置多颜色很容易做到这一点,只是计算与视图的宽度%,而设定的颜色来完成这一点。但我不知道如何在角落做到这一点。

有什么想法吗?

非常感谢。

EDIT

我使用ShapeDrawable溶液和有如下结果。 我只更新颜色和百分比标签。

我的问题是:为什么分割线是歪斜的?

enter image description here

UPDATE

有succesw得到结果,但是这不是我想要的..

enter image description here

我希望我能得到清晰的分割如下图所示:

enter image description here

+0

我找到了这样的一些解决方案:https://azzits.wordpress.com/2013/11/17/customseekbar/ 但我不是我想要的... – AlanChien

回答

0

我想我已达到你的预期。不幸的是,这样的drawable不能被制作为.xml,但可以用代码完成。这里是模板:

ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() { 
    @Override 
    public Shader resize(int width, int height) { 
     LinearGradient lg = new LinearGradient(0, 0, width, 0, 
        new int[]{ 
          ContextCompat.getColor(getContext(), android.R.color.holo_green_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_green_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_orange_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_orange_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_red_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_red_light), 
          ContextCompat.getColor(getContext(), android.R.color.holo_purple), 
          ContextCompat.getColor(getContext(), android.R.color.holo_purple)}, 
        new float[]{0, 0.60f, 0.60f, 0.80f, 0.80f, 0.85f, 0.85f, 1}, Shader.TileMode.REPEAT); 
      return lg; 
    } 
}; 
PaintDrawable p = new PaintDrawable(); 
p.setShape(new RectShape()); 
p.setCornerRadius(40); 
p.setShaderFactory(sf); 

查看上面的几个细节。创建LinearGradient时,必须传递一组颜色及其在渐变中的位置。为了实现very long绿色,您必须加倍绿色并通过位置00.96f。然后一次添加orange颜色。请注意,​​和紫色之间的差异必须非常低(但必须是颜色为orange的空间)。

然后,只需设置适当半径:

p.setCornerRadius(40); 

此溶液是可伸缩的作为颜色和颜色位置可以被动态地改变。

+0

好,几乎在那里。如果您调整此解决方案以接受一组颜色或百分比率的颜色字典,那么它将可扩展并可立即重用到OP。它应该只需要调整参数类型并添加一个循环。迄今为止工作出色。 –

+0

嗨,@ R.zagorski,我感谢你的回答。我试图用你的解决方案来解决我的问题。但在编辑问题上的结果..你有什么想法? – AlanChien

+0

“LinearGradient”构造函数的第四个参数应该不同。编辑答案。 –