2014-10-08 1 views
1

Я использую цвет фона на изображении, чтобы сделать цвет прямоугольника, и я хочу постепенно превращаться в более светлый цвет с помощью искателя, удаляя RG или B из шестнадцатеричного цвет. Как я могу это сделать без написания миллиона строк кода? Это пример того, что я хочу, чтобы экспериментировать с одной коробкой. https://d396qusza40orc.cloudfront.net/cmsc436/Labs/ModernArtUI/modernUI.mp4Android: изменение цвета постепенно для нескольких фоновых изображений изображений с помощью seekbar

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 
      if (i >= 25 && i < 50) { 
       imageView.setBackgroundColor(Color.BLUE); 
      } else if (i >= 50 && i < 75) { 
       imageView.setBackgroundColor(Color.GREEN); 
      } else if (i >= 75 && i <= 100) { 
       imageView.setBackgroundColor(Color.YELLOW); 
      } else { 
       imageView.setBackgroundColor(Color.WHITE); 
      } 
     } 

Ответ найдено:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 
       iv1.setBackgroundColor(Color.argb(0xFF, i, i, 200)); 
} 

В зависимости от того, какого цвета вы хотите, установите максимальный на SeekBar до 255, и вы можете играть с числами, чтобы получить желаемый цвет на постепенном изменение. Также отличная рекомендация при поиске цвета http://www.tayloredmktg.com/rgb/

+0

'GradientDrawable' может позаботиться о том, чтобы вы рисовать линейные градиенты для вас, если вы снабдите его базовыми цветами. Хотя вы можете предоставить максимум трех цветов при определении в XML, фактическая реализация на Java не имеет таких ограничений. – corsair992

ответ

4
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    @Override 
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 
      iv1.setBackgroundColor(Color.argb(0xFF, i, i, 200)); 
} 

В зависимости от того, какой цвет вы хотите, установите максимальную на SeekBar до 255, и вы можете играйте с цифрами, чтобы получить желаемый цвет при постепенном изменении. Также отличная рекомендация при поиске цвета http://www.tayloredmktg.com/rgb/

3

Не существует ни одного правильного пути. Это зависит от того, как вы хотите пересечь спектр цвета.

Один из вариантов:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    @Override 
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 

     float hue = i/100f; 
     imageView.setBackgroundColor(Color.HSVToColor(new float[]{ hue, 1f, 0.75f })); 
    } 

Другой (менее изящный) вариант был бы

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    @Override 
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 
     double increment = 0xFFFFFFd/100d; 
     int color = i * increment; 

     imageView.setBackgroundColor(color); 
    } 
+0

Спасибо за ответ, как бы отредактировать первый вариант, чтобы перейти от синего до желтоватого цвета? или что-то очень похожее на это видео https://d396qusza40orc.cloudfront.net/cmsc436/Labs/ModernArtUI/modernUI.mp4 – goudarziha

+1

Я бы предложил прочитать теорию цвета. Важно понимать, что вы делаете, а не просто копировать и вставлять код других людей. Это особенно верно, когда вы участвуете в курсе, чтобы узнать его (как указывала ссылка выше). Возможно, вы можете начать читать здесь: http://en.wikipedia.org/wiki/HSL_and_HSV – Stephen

Смежные вопросы