android-如何从线性渐变获取当前颜色?
作者:互联网
我有一个搜索栏,其值的范围从1到10.THUMB停在1,2,3,4,5 … 10.
如果SeekBar为线性渐变,则为背景色[颜色从红色开始,然后是黄色,最后是绿色].如何获得拇指所在位置的当前颜色?
解决方法:
pskink’s suggestion是正确的.您可以使用ArgbEvaluator实现此目标.
假设这是您的SeekBar:
C1 C2 C3
+-------|-------|-------|-------|---+---|-------|-------|-------|-------+
1 2 3 4 5 6 7 8 9 10
您有10个Thumb位置(从1到10的数字),3种颜色(正负号表示颜色的位置,而C1,C2和C3表示颜色的名称).
C1和C2之间(以及C2和C3之间)的距离可以分为9个部分.这9个片段可以代表您的Thumb位置:
C1 C2 C3
+-------|-------|-------|-------|---+---|-------|-------|-------|-------+
| | | | | | | | | | |
0/9 2/9 4/9 6/9 8/9 9/9 | | | | |
| | | | | |
0/9 1/9 3/9 5/9 7/9 9/9
因此,可以通过以下方式计算SeekBar的值:
int c1 = 0xFFFF0000; // ARGB representation of RED
int c2 = 0xFFFFFF00; // ARGB representation of YELLOW
int c3 = 0xFF00FF00; // ARGB representation of GREEN
ArgbEvaluator evaluator = new ArgbEvaluator();
int thumb1 = (int) evaluator.evaluate(0f, c1, c2); // 0f/9f = 0f
int thumb2 = (int) evaluator.evaluate(2f / 9f, c1, c2);
int thumb3 = (int) evaluator.evaluate(4f / 9f, c1, c2);
int thumb4 = (int) evaluator.evaluate(6f / 9f, c1, c2);
int thumb5 = (int) evaluator.evaluate(8f / 9f, c1, c2);
int thumb6 = (int) evaluator.evaluate(1f / 9f, c2, c3);
int thumb7 = (int) evaluator.evaluate(3f / 9f, c2, c3);
int thumb8 = (int) evaluator.evaluate(5f / 9f, c2, c3);
int thumb9 = (int) evaluator.evaluate(7f / 9f, c2, c3);
int thumb10 = (int) evaluator.evaluate(1f, c2, c3); // 9f/9f = 1f
标签:android,background,colors,seekbar 来源: https://codeday.me/bug/20191012/1896987.html