2016-12-02 3 views
9

このコードでLineageRadientで色相勾配を作りました:(Color.parseColorでシンプルにできたかもしれませんが、これは私の意図するところでなければなりません。いずれかの描画可能。)わずかにオフセットされた色を使用してこの結果を生成LineageRadientが指定された位置からオフセットされて描画されます

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

は、緑色領域が小さすぎると青の領域は、予想される結果と比較して大きすぎます。

comparison

私はすべてをチェックします。私は、同じ結果、位置引数にnullの代わりにnew float[]{0f, 1/6f, 2/6f, 3/6f, 4/6f, 5/6f, 1f}を使用しようとしました。これはバグかもしれません。

これはthis postでもthis oneでもないことに注意してください。これらは私の場合ではないコードで設定された不正な勾配の停止に関するものです。それはthis oneに関連するかもしれませんが、私はどのように見えません。

編集:これは、不等な位置を色に設定することで解決できる可能性がありますが、これらの正確な位置はどのように計算できますか?

+0

正直、実際と予想の唯一の違いはいくらか相殺されているようです。 – natario

+0

これは私が解決しようとしているものであり、私が提供したコードの外にある私のコードでは何も原因ではありません。 –

+0

はい、あります。 360,1,1の代わりに0,1,1を最後の色として使用するとどうなりますか? – natario

答えて

3

私はこれを合計で3時間以上解決するために取り組んできました...それはほとんど何もなかったことが分かります。それは私のコードの中にありました。最悪の場合、私は賞金を加えて15分後に解決しました。

私は、特定のパディングとビューにグラデーションを描き、代わりにこの

LinearGradient(0, 0, width, 0, colors, null, Shader.TileMode.CLAMP); 

の私はこれを行う必要がありました:

LinearGradient(left, 0, right, 0, colors, null, Shader.TileMode.CLAMP); 

どういうわけ勾配は私に追加パディングの前に開始されますが表示、(0、0)、勾配の開始の10ディップ左、オフセットの原因となります。

enter image description here

それはすべて今理にかなっています。

関連する問題