2

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

色で少し遊んでみました

  1. c1=green と c2-transparent のみを設定します
    <color name="test1">#ff00ff00</color>
    <color name="test2">#000000ff</color>
    

ここに画像の説明を入力

  1. 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 に依存すると思います。

4

1 に答える 1

1

透け効果はあります。問題は、テキストの上にある 0 からグラデーションを開始することです。おそらく、使用しているフォントの TextView および/または FontMetrics のパディングを考慮する必要があります。

于 2013-05-18T20:08:32.690 に答える