2015-11-01 3 views
2

У меня есть панель поиска, значения которой колеблются от 1 до 10. THUMB останавливается на 1,2,3,4,5 ... 10.Как получить текущий цвет от линейного градиента?

Цвет фона, если SeekBar - линейный градиент [Цвета начинаются с КРАСНОГО , затем ЖЕЛТЫЙ и, наконец, ЗЕЛЕНЫЙ]. Как получить текущий цвет, когда большой палец позиционируется?

+1

'ArgbEvaluator' является единственным, что я могу думать, но я» м не 100%, если вы получите тот же цвет – pskink

ответ

2

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 
Смежные вопросы