其他分享
首页 > 其他分享> > android-如何从线性渐变获取当前颜色?

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