2016-08-08 11 views

Antwort

4

Einige Programmierer kommen aus mehr Erfahrung mit offenkundigen 24-Bit-Farben. Und manchmal spielt es bei Android eine Rolle, dass das Alpha in direkteren Manipulationen im Renderscript nicht maskiert wird. Und wenn du willst, dass '0xff4ca665' dem System mitteilt, dass du '0x4ca665' willst und hoffe, dass etwas anderes es später korrekt maskiert, dann erscheint es wie eine flüchtige Wette auf etwas, das buchstäblich nicht einmal einen Taktzyklus verschwenden kann.

Irgendetwas nimmt keine ResID-Links zu Farben oder gibt Ihnen eine Option wie View.setBackgroundColor (int), wo der Int für die Farbe in einer 32-Bit-Ganzzahl wie dieser codiert ist.

Genau so funktioniert Alpha Masking in 24 Bit Farben. Sie werden als 32-Bit-Integer als 0bAAAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB formatiert. So erhält jede RGB-Farbe 8 Bits und es gibt 8-Bit-Maskierung für das Alpha, was auch immer mit der PorterDuff-Mischung durchgeführt wird, um das Ergebnis zu rendern. Android speichert Farben rein als ganze Zahlen, daher ist es eine gute Idee, wenn sie so enden.

Wenn Sie es in hex wie das tun, erhalten Sie zwei Ziffern für jedes Ding 0xAARRGGBB und das AA wird auf ff gesetzt, was bedeutet 255 oder vollständig undurchsichtig. Keine Notwendigkeit, den Farben zu vertrauen, um nicht völlig undurchsichtig zu sein. Es gibt eine Menge Zeiten, wenn Sie diese als 00 verlassen Sie am Ende mit einem leeren Bild, oder auch völlig transparent. Zu wissen, wann es wichtig ist, ist es nicht wert, wenn wir einfach das Alpha einschließen.

Android hat auch ein paar andere Schemata, die wichtig sind, die Farben in Shorts speichern. Nämlich 4444, die Alpha und jede Farbe in 4 Bits speichert. Und 565 speichert das Rot in 5 Bits, Grün in 6 Bits und Blau in 5 Bits. Beide verwenden am Ende insgesamt 16 Bits anstatt 32. Aber sehr viele Codierschemata verwenden 8888, was ziemlich Standard ist, so dass es sehr üblich ist, Leute zu sehen, die auf die Farben wie diese verweisen, besonders in hex.

+1

Es gibt auch die kürzeren Notationen '# argb' und' # rgb', die verwendet werden, wenn die hex aus identischen Zahlen bestehen (alle Komponenten müssen diese Eigenschaft haben).So kann zum Beispiel '# ff88bbcc' wie' # f8bc' oder '#8bc' umgeschrieben werden. –

+0

Diese sind tatsächlich textbasiert. Und während für etwas eindeutig bevorzugt, müssen sie durch die Ressourcen geschoben werden, die, wenn Ihre Operation jeden einzelnen Taktzyklus benötigt, es nicht wert sein könnte. Als int Farbe = #ffa; wird nichts tun. Wenn Sie das wollen und nicht einmal einen Taktzyklus verschwenden wollen, rendern Sie das als color = 0xFFFFFFAA – Tatarize

2

Gleicher Grund wie #ff4ca665 ... Um eine ARGB color value zu bezeichnen.

Bei Verwendung der obigen in den Farben XML ist die führende ff nicht ganz notwendig, da diese volle Deckkraft erhalten.

Die 0xff4ca665 wäre die äquivalente Java-Darstellung.

In jedem Fall erhalten Sie die folgende Farbe

body { 
 
    background: #4ca665; 
 
}

+1

Insbesondere, wo die ersten zwei Hexadezimalziffern das Alpha darstellt: wie viel Transparenz für die Farbe gelten soll. – CommonsWare

+0

Das führende 'ff' _ist_ notwendig für die hexadezimale Repräsentation in Java, nach der das OP fragt. '0xff4ca665' ist nicht dasselbe wie' 0x4ca665', was transparent ist. –

2

Einige Android-APIs wie View.setBackgroundColor() erwarten Farbwerte des ARGB-Formats. So bezeichnet 0xff4ca665 die volldeckende RGB-Farbe #4ca665, während die ganze Zahl 0x4ca665 gleich 0x004ca665 ist und daher die volltransparente Farbe bezeichnet.

Verwandte Themen