2015-02-12 16 views
6

Ich versuche, die Opazität einer Farbe zu ändern, die ich von meinem Thema mit dem nächsten Code zu erhalten:ändern int Farbe Opazität in java/android

TypedValue typedValueDrawerSelected = new TypedValue(); 
getTheme().resolveAttribute(R.attr.colorPrimary, typedValueDrawerSelected, true); 
int colorDrawerItemSelected = typedValueDrawerSelected.data; 

Ich möchte, dass die colorDrawerItemSelected die gleiche Farbe hält, buth sein Alpha sollte 25% betragen.

Ich habe einige Lösungen gefunden, die die rgb-Farbe aus dem imageView bekommen, aber ich habe nicht imageView.

Vielen Dank für Ihre Zeit.

+0

Verwenden Sie 'setAlpha();' – Apurva

+0

@Dahnark Es ist sehr viel möglich. –

Antwort

17

Wäre es nicht ausreichend sein?

colorDrawerItemSelected = (colorDrawerItemSelected & 0x00FFFFFF) | 0x40000000; 

Es speichert den Farbwert und setzt das Alpha auf 25% von max.

Das erste Byte in der Farbe int ist für die Transparenz verantwortlich: 0 - vollständig transparent, 255 (0xFF) - opak. Im ersten Teil (Operation "&") setzen wir das erste Byte auf 0 und belassen andere Bytes unberührt. Im zweiten Teil setzen wir das erste Byte auf 0x40, das sind die 25% von 0xFF (255/4 ÷ 64).

+0

Es funktioniert, danke :) – Dahnark

+0

Können Sie mir einen Link geben, die zeigen, wie diese Kombination von "&" und "|" zu verwenden. Ich bin Neuling in Android und ich würde gerne wissen, um es zu verstehen (Ich sah diese Symbole andere Zeiten). – Dahnark

+1

@Dahnark Es ist bitweise Operationen https://en.wikipedia.org/wiki/Bitwise_operation "&" - bitweise UND. "|" - bitweise ODER. –

6
int[] attrs = new int[] { android.R.attr.colorPrimary }; 
TypedArray a = obtainStyledAttributes(attrs); 
int colorPrimary = a.getColor(0, 0); 
a.recycle(); 

Jetzt können Sie die Opazität von colorPrimary ändern, indem die höchsten 8 Bits Aktualisierung:

//set new color 
int newColor = (colorPrimary & 0x00FFFFFF) | (0x40 << 24); 
+0

Vielen Dank auch :) aber ich habe den Code von Sergey verwendet, weil es einfacher ist. – Dahnark

+0

@Dahnark Es ist fast der gleiche Code eigentlich :) –

4

Ich benutze diesen Ansatz in meiner App:

private int getTransparentColor(int color){ 
    int alpha = Color.alpha(color); 
    int red = Color.red(color); 
    int green = Color.green(color); 
    int blue = Color.blue(color); 

    // Set alpha based on your logic, here I'm making it 25% of it's initial value. 
    alpha *= 0.25; 

    return Color.argb(alpha, red, green, blue); 
} 

Sie auch ColorUtils.alphaComponent(color, alpha) vom Träger lib verwenden können.

0

Verwenden Sie ColorUtils.setAlphaComponent (Farbe, Alpha), um den Alpha-Wert auf eine einfache Farbe festzulegen. Die ColorUtils-Klasse befindet sich in der Android-Support-Bibliothek.