Linear Gradientを使用して TextView でグラデーションの色を設定したところ、非常に興味深い状況が見つかりました。TextView グラデーションを設定するには、次のコードを使用しました。
int c1 = getResources().getColor(R.color.test1);
int c2 = getResources().getColor(R.color.test2);
Shader shader = new LinearGradient(0, 0, 0, status.getTextSize(),
new int[]{c1, c2},
new float[]{0, 1}, Shader.TileMode.CLAMP);
status.getPaint().setShader(shader);
色で少し遊んでみました
- c1=green と c2-transparent のみを設定します
<color name="test1">#ff00ff00</color> <color name="test2">#000000ff</color>
- c2=blue と c1-transparent のみを設定します
<color name="test1">#0000ff00</color> <color name="test2">#ff0000ff</color>
したがって、2番目のケースでは透明ではありません。
誰かがこのグラデーションビルダーの性質を説明できますか?
更新: @Romain Guy の回答に感謝します。私はグラデーションでもっと遊んで、私が望むものをほとんど手に入れました:
Shader shader = new LinearGradient(0, 0, 0, status.getTextSize(),
new int[]{c1, c2, colour, colour},
new float[]{0.2f, 0.7f, 0.699f, 1}, Shader.TileMode.CLAMP);
および status.setIncludeFontPadding();
真実:
間違い:
また、パディング値に応じて無地とグラデーションの色がシフトする中央の境界線を見ることができます。
TextView の文字の中心を正確に取得するために、グラデーション境界線の float 値を計算できますか? FontType に依存すると思います。