Zrobiłem gradient odbarwiony za pomocą Lineargradienta z tym kodem: (Wiem, że to mogłoby być prostsze z Color.parseColor
, ale to musi być w ten sposób, co zamierzam zrobić. rozciągliwej albo.)Lineargradient jest narysowany jako przesunięcie względem określonej pozycji
colors = new int[]{ Color.HSVToColor(new float[]{0, 1, 1}),
Color.HSVToColor(new float[]{60, 1, 1}),
Color.HSVToColor(new float[]{120, 1, 1}),
Color.HSVToColor(new float[]{180, 1, 1}),
Color.HSVToColor(new float[]{240, 1, 1}),
Color.HSVToColor(new float[]{300, 1, 1}),
Color.HSVToColor(new float[]{360, 1, 1}) };
Shader shader = new LinearGradient(0, 0, width, 0, colors, null, Shader.TileMode.CLAMP);
paint.setShader(shader);
która produkuje ten wynik z lekko offsetted kolorów, zieleń jest zbyt mały i niebieski obszar jest zbyt duży w stosunku do oczekiwanego rezultatu.
Sprawdziłem wszystko. Próbowałem użyć new float[]{0f, 1/6f, 2/6f, 3/6f, 4/6f, 5/6f, 1f}
zamiast null
dla argumentu pozycji, ten sam wynik. To może być również błąd.
Należy pamiętać, że nie jest to duplikat this post ani this one. Chodzi o niepoprawne zatrzymania gradientu ustawione w kodzie, co nie jest moim przypadkiem. Może to być związane z this one, ale nie widzę sposobu.
EDYCJA: Może to można rozwiązać, ustawiając nierówne pozycje w kolorach, ale jak mogę obliczyć te dokładne pozycje?
Szczerze mówiąc, jedyna różnica między faktycznym a oczekiwanym wydaje się być pewnym przesunięciem. – natario
To właśnie próbuję rozwiązać i nie może to być spowodowane przez cokolwiek w moim kodzie poza tym, który podałem. –
Tak, widzę. Co się stanie, jeśli użyjesz 0, 1, 1 jako ostatniego koloru, zamiast 360, 1, 1? – natario