2013-06-21 18 views
12

Pracuję nad prostą aplikacją z wykresem słupkowym, która wykorzystuje statyczną tablicę kolorów do dzielenia kolorów paska. Chciałbym, żeby ta funkcja normalnie rysowała paski lub była lekko przezroczysta.Programowo spraw, aby kolor był bardziej przezroczysty.

Czy istnieje sposób programowego dopasowania liczby całkowitej tak, aby była lekko przezroczysta? Czy będę musiał statycznie zdefiniować przezroczystą wersję każdego koloru, a następnie przełączyć się do używania tych wersji, gdy chcę przejrzystości?

+0

Wystarczy popatrzeć na setAlpha http://developer.android.com/reference/android/view/View.html#setAlpha(float) –

Odpowiedz

8

Jasne ... Spójrz na kolor i jest funkcją:

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

Powrót kolor-int z alfa, czerwony, zielony, niebieski komponentów.

Twoje wartości RGB mogą być statyczne i po prostu podskakujesz wartość alfa, aby uzyskać nową przezroczystą wersję koloru.

+2

Dzięki ton! Dla tych, którzy zastanawiają się, jak uzyskać wartości RGB z liczby całkowitej, spójrz tutaj: http: // stackoverflow.com/questions/5526690/convert-a-raw-negative-rgb-int-value-back-to-a-3-number-rgb-value – TrolliOlli

+0

Nie ma za co. Jeszcze bardziej mile widziane, jeśli oznaczysz odpowiedź jako zaakceptowaną. :) – spartygw

1

Spróbuj następujący kod

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

czy kolor ma kod alfa następnie

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

Jeśli używasz biblioteki wsparcia, można użyć ColorUtils.setAlphaComponent(int color, int alpha). Jeśli nie korzystasz z biblioteki wsparcia, rozwiązanie jedna linia biorąc od niego znajduje się kod źródłowy jest:

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

+1

To powinna być poprawna odpowiedź. Jest to prostsze, a setAlphaComponent działa bardzo dobrze, o ile wartość alpha wynosi od 0 do 250. –

+1

Jestem "Z_Oprawnym" pomiędzy 0 a 255, aby być bardziej precyzyjnym –

+0

ColorUtils.setAlphaComponent został dodany do API (22.1) ~ 2 lata po tym pytaniu opublikowany. Cała klasa ColorUtils zawiera całą masę zgrabnych rzeczy. Każdy, kto natknie się na ten wątek, będzie mógł go przejrzeć (https://developer.android.com/reference/android/support/v4/graphics/ColorUtils.html). – spartygw

2

Z górnej odpowiedź I stworzył metodę, aby to zrobić:

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

Warto również noteing że można to zmienić na metodę rozszerzenia jak tak

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); 
    } 
} 

W odniesieniu do wartości alfa, od MSDN Color.FromArgb:

Uwagi

Aby utworzyć nieprzezroczysty kolor, ustawić alfa do 255. Aby utworzyć półprzezroczysty kolor, ustawić alfa do dowolnej wartości od 1 do 254.

2

Hi there was przydałby się:

android.support.v4.graphics.ColorUtils # setAlphaComponent

uwaga: tutaj alfa wynosi od 0 do 255, a nie w oparciu o%.

Są tam również inne metody wykorzystania, takie jak obliczenia kontraktu i jaskrawości.

Pozdrowienia

Powiązane problemy