2013-06-21 4 views
12

Я работаю над простым графическим приложением, которое использует статический массив цветов для выделения цветов бара. Я хотел бы, чтобы функциональность либо рисовала полосы нормально, либо слегка прозрачно.Программно сделать цвет более прозрачным

Есть ли способ программно настроить целое число цвета, чтобы он был слегка прозрачным? Или мне придется статически определять прозрачную версию каждого цвета, а затем переключиться на использование этих версий всякий раз, когда мне нужна прозрачность?

+0

Посмотрите SetAlpha http://developer.android.com/reference/android/view/View.html#setAlpha(float) –

ответ

8

Конечно ... Посмотрите на цвет и есть функция:

static int argb(int alpha, int red, int green, int blue) 

Вернуть цвет-ИНТ из альфа, красного, зеленого, синего компонентов.

Таким образом, ваши значения RGB могут быть статическими, и вы просто получаете альфа-значение, чтобы получить новую прозрачную версию цвета.

+2

Спасибо за тонну! Для тех из вас, кто интересуется, как получить значения RGB из целого числа, посмотрите здесь: http: // stackoverflow.com/questions/5526690/convert-a-raw-negative-rgb-int-value-back-to-a-3-number-rgb-value – TrolliOlli

+0

Добро пожаловать. Еще приветствуем, если вы отметите ответ как принятый. :) – spartygw

1

Try следующий код

int color = (int)Long.parseLong(your_color, 16); 
int r = (color >> 16) & 0xFF; 
int g = (color >> 8) & 0xFF; 
int b = (color >> 0) & 0xFF; 

если код цвета имеет альфа-то

int alpha= (color >> 24) & 0xFF; 
45

Если вы используете библиотеку поддержки, вы можете использовать ColorUtils.setAlphaComponent(int color, int alpha). Если вы не используете библиотеку поддержки, одна линия решение принимать от его исходного кода:

int res = (color & 0x00ffffff) | (alpha << 24);

+1

Это должен быть правильный ответ. Это проще и setAlphaComponent работает очень хорошо, пока альфа-int находится между 0 и 250. –

+1

I'm_With_Stupid от 0 до 255, а точнее –

+0

ColorUtils.setAlphaComponent был добавлен в API (22.1) ~ 2 года после того, как этот вопрос был вывешенный. Весь класс ColorUtils содержит целую кучу опрятных вещей. Любой, кто наткнулся на этот поток, теперь будет хорошо рассмотрен (https://developer.android.com/reference/android/support/v4/graphics/ColorUtils.html) – spartygw

2

С верхнего ответа я создал метод, чтобы сделать это:

private Android.Graphics.Color AddTransparencyToColour(Android.Graphics.Color color, int transparancy) 
{ 
    return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B); 
} 

Стоит также noteing, что это может быть изменен на метод расширения, как так

public static ColorExtensions 
{ 
    public static Android.Graphics.Color AddTransparency(this Android.Graphics.Color color, int transparancy) 
    { 
     return Android.Graphics.Color.Argb(transparancy, color.R, color.G, color.B); 
    } 
} 

в отношении альфа-значение, от MSDN Color.FromArgb:

Замечания

Чтобы создать непрозрачный цвет, установить альфа 255. Для того, чтобы создать полупрозрачный цвет, установить альфа в любое значение от 1 до 254.

2

Привет там вас можно использовать:

android.support.v4.graphics.ColorUtils # setAlphaComponent

примечание: альфа здесь от 0 до 255, а не%.

Существуют также другие методы использования таких расчетов контрактов и светимости.

С уважением