Problem z ComposeShader na Androida 4.1.1

Po prostu próbuję zaimplementować próbnik kolorów dla mojej aplikacji na Androida i wpadłem na dziwny problem z Androidem 4.1.1. Poniższy kod nie tworzy oczekiwanych gradientów na Androidzie 4.1.1, ale działa na 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);

Oto problem:

(ignoruj ​​czerwone pole poniżej na Androida 4.1.1. Po prostu mówię o gradiencie powyżej)

Każdy pomysł, co się stało? Myślę, że czegoś brakuje w moim kodzie, ale nie mam pojęcia, co.

EDYCJA # 1: Jeśli tylko użyjęwhiteMask dlasetShader, Otrzymuję również różne wyniki dla obu systemów: na 2.3.7 widzę tekst menu konfiguracyjnego (który znajduje się za wyskakującym oknem) świecący przez prostokąt gradientu. Ponadto istnieje gradient od lewej górnej krawędzi do dolnej prawej krawędzi (czarny do białego), ale gradient na 4.1.1 przechodzi poziomo od lewej do prawej.Więc wydaje się, że jest z tym problemComposeShader

EDYCJA # 2: Znalazłem prostszy przykład opisania problemu:

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

Mamy więc pionowy gradient liniowy od dowolnego koloru do czarnego i poziomy liniowy gradient od czerni do bieli. Jeśli pomnożymy te dwie warstwy, powinniśmy otrzymać poprawny prostokąt (jak na lewym zrzucie ekranu powyżej). Ale na Androidzie 4.1.1 widzę tylko gradient shadera2. Wypróbowałem to także w Gimp z dwiema warstwami i wynik był taki sam jak w Android 2.3.7.

questionAnswers(1)

yourAnswerToTheQuestion