我正在尝试使用动态百分比标签在视图中和角落中设置不同的颜色(如图)。查看具有动态多颜色和边角的背景
如果只设置多颜色很容易做到这一点,只是计算与视图的宽度%,而设定的颜色来完成这一点。但我不知道如何在角落做到这一点。
有什么想法吗?
非常感谢。
EDIT
我使用ShapeDrawable溶液和有如下结果。 我只更新颜色和百分比标签。
我的问题是:为什么分割线是歪斜的?
UPDATE
有succesw得到结果,但是这不是我想要的..
我希望我能得到清晰的分割如下图所示:
我正在尝试使用动态百分比标签在视图中和角落中设置不同的颜色(如图)。查看具有动态多颜色和边角的背景
如果只设置多颜色很容易做到这一点,只是计算与视图的宽度%,而设定的颜色来完成这一点。但我不知道如何在角落做到这一点。
有什么想法吗?
非常感谢。
EDIT
我使用ShapeDrawable溶液和有如下结果。 我只更新颜色和百分比标签。
我的问题是:为什么分割线是歪斜的?
UPDATE
有succesw得到结果,但是这不是我想要的..
我希望我能得到清晰的分割如下图所示:
我想我已达到你的预期。不幸的是,这样的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
绿色,您必须加倍绿色并通过位置0
和0.96f
。然后一次添加orange
颜色。请注意,和紫色之间的差异必须非常低(但必须是颜色为orange
的空间)。
然后,只需设置适当半径:
p.setCornerRadius(40);
此溶液是可伸缩的作为颜色和颜色位置可以被动态地改变。
好,几乎在那里。如果您调整此解决方案以接受一组颜色或百分比率的颜色字典,那么它将可扩展并可立即重用到OP。它应该只需要调整参数类型并添加一个循环。迄今为止工作出色。 –
嗨,@ R.zagorski,我感谢你的回答。我试图用你的解决方案来解决我的问题。但在编辑问题上的结果..你有什么想法? – AlanChien
“LinearGradient”构造函数的第四个参数应该不同。编辑答案。 –
我找到了这样的一些解决方案:https://azzits.wordpress.com/2013/11/17/customseekbar/ 但我不是我想要的... – AlanChien