TextView中的LinearGradient和透明色。

问题描述 投票:2回答:1

我用的是 线性梯度 在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=绿色,c2-透明。
    <color name="test1">#ff00ff00</color>
    <color name="test2">#000000ff</color>
    

enter image description here

  1. 只设置c2=蓝色,c1-透明。
    <color name="test1">#0000ff00</color>
    <color name="test2">#ff0000ff</color>
    

enter image description here

所以我在第二种情况下看不到透明。

谁能解释一下这个梯度生成器的性质?

更新了一下,谢谢 @Romain Guy 的回答。感谢 @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);

and status.setIncludeFontPadding();

true: true:enter image description here

false.setIncludeFontPadding(); true: false:enter image description here

如你所见,纯色和渐变色的中心边框根据padding值的变化而变化。

我们是否可以计算渐变边框的浮动值来精确地获得TextView中字符的中心?我想这将取决于FontType。

android textview transparency gradient
1个回答
1
投票

半透明效果是有的。问题是你在0处开始渐变,也就是在文字上方。你可能应该考虑到TextView的padding和你使用的字体的FontMetrics。

© www.soinside.com 2019 - 2024. All rights reserved.