Problem mit ComposeShader unter Android 4.1.1

Ich versuche nur, einen Farbwähler für meine Android-Anwendung zu implementieren, und bin auf ein seltsames Problem unter Android 4.1.1 gestoßen. Der folgende Code erstellt unter Android 4.1.1 nicht die erwarteten Farbverläufe, jedoch unter 2.3.7:

Shader fadeInRight = new LinearGradient(0, 0, pWidth, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP);
Shader blackToWhite = new LinearGradient(0, 0, 0, pHeight, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP);
Shader whiteMask = new ComposeShader(blackToWhite, fadeInRight, PorterDuff.Mode.DST_IN);
Shader blackToColor = new LinearGradient(0, 0, pWidth, 0, 0xFF000000, hue, Shader.TileMode.CLAMP);
Shader shader = new ComposeShader(blackToColor, whiteMask, PorterDuff.Mode.SCREEN);
paint.setShader(shader);
...
canvas.drawRect(new Rect(0, 0, pWidth, pHeight), paint);

Hier ist das Problem:

(Ignoriere das rote Kästchen unter Android 4.1.1. Ich spreche nur über den Farbverlauf oben)

Irgendeine Idee was ist los? Ich denke, es fehlt etwas in meinem Code, aber ich habe keine Ahnung, was.

EDIT # 1: Wenn ich nur benutzewhiteMask zumsetShaderIch erhalte auch unterschiedliche Ergebnisse für beide Systeme: Auf dem 2.3.7 sehe ich den Text des Konfigurationsmenüs (der sich hinter dem Popup befindet) durch das Verlaufsrechteck. Außerdem gibt es einen Farbverlauf von der linken oberen zur rechten unteren Kante (schwarz nach weiß), der Farbverlauf in 4.1.1 verläuft jedoch horizontal von links nach rechts.Es scheint also ein Problem mit zu seinComposeShader

EDIT # 2: Ich habe ein einfacheres Beispiel gefunden, um das Problem zu beschreiben:

Shader shader1 = new LinearGradient(0, 0, 0, pHeight, hue, 0xffffffff, Shader.TileMode.CLAMP);
Shader shader2 = new LinearGradient(0, 0, pWidth, 0, 0xff000000, 0xffffffff, Shader.TileMode.CLAMP);
Shader shader = new ComposeShader(shader1, shader2, PorterDuff.Mode.MULTIPLY);

Wir haben also nur einen vertikalen linearen Verlauf von jeder Farbe nach Schwarz und einen horizontalen linearen Verlauf von Schwarz nach Weiß. Wenn wir diese beiden Ebenen multiplizieren, sollten wir das richtige Rechteck erhalten (wie im linken Screenshot oben). Aber auf Android 4.1.1 sehe ich nur den Farbverlauf von Shader2. Ich habe dies auch in Gimp mit zwei Ebenen versucht und das Ergebnis war das gleiche wie auf Android 2.3.7.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage