Google Kalendar - Calendar-Color


#1

Hi,

ich meiner App lege ich u.A. Kalendar (mit dem ContentResolver) an.
Dabei lege ich auch eine Farbe für den neuen Kalender fest:
contentvalues.put(Calendars.CALENDAR_COLOR, 11787372);

Der Kalendar sollte dann so ein helles Grün haben.

Allerdings hat der Kalendar in der Google-Kalender App immer Schwarz als Farbe.

Wo liegt der Fehler, was mach ich hier falsch?

Gruß

*** Edit ***

Hi,

ich hab gelesen, es kann daran liegen, dass der Alpha-Wert der Farbe auf Transparent steht.

Im Moment erstelle ich aus einem Hex-Farbecode einen Dezimal-Integerwert.

String color = "#B3DC6C";
[...]
String strColor = color.replace("#","");
int intColor = Integer.parseInt(strColor, 16);

wie kann ich den Code umbauen, dass der Alpha-Wert auch berücksichtigt wird?

Gruß


#2

was bei deiner API benötigt wird oder herauskommt kann ich nicht beurteilen,

aber Java Color bietet dazu RGB-Vorstellungen und Code-Möglichkeiten, mögen diese passen oder auch nicht:
ein int besteht aus 4 Bytes, 4x 8 Bits,
denkt man nur an RGB, sind das nur die letzten 3 Bits davon, dein Color-String ist dazu ein Beispiel

ein Color-Konstruktor ist

     * Creates an opaque sRGB color with the specified combined RGB value
     * consisting of the red component in bits 16-23, the green component
     * in bits 8-15, and the blue component in bits 0-7.  The actual color
     * used in rendering depends on finding the best match given the
     * color space available for a particular output device.  Alpha is
     * defaulted to 255.
     *
     * @param rgb the combined RGB components
     * @see java.awt.image.ColorModel#getRGBdefault
     * @see #getRed
     * @see #getGreen
     * @see #getBlue
     * @see #getRGB
     */
    public Color(int rgb) {
        value = 0xff000000 | rgb;
    }

ergänzt automatisch 255 für keine Transparenz, volle Farbe, vorne im int,
mit getRGB() bekommt man den value dann auch vollständig zurück

        int intColor = Integer.parseInt(color, 16);
        Color c = new Color(intColor);
        System.out.println(c.getAlpha()); // 255
        System.out.println(c.getRGB()); // -4989844
        int intColor2 = 0xff000000 | intColor;
        System.out.println(intColor2); // -4989844

das wäre also ein Weg, falls dir ein anderer int weiterhilft, mit Color oder direkt mit der Bitmaske,
da das erste Bit für Negation steht ist so ein int immer negativ, nicht allzu schön,

als String wäre FF vorne zu ergänzen, wobei dann Integer.parseInt() streikt, noch so ein Standardproblem mit derart hohen (bzw. negativ niedrigen) Werten,
inline Long.parseLong(color, 16);[/inline] ginge aber, erst mittelhoher long, im int-Wertebereich dann korrekt negativ