如何在 TextView Android 中将渐变设置为文本颜色并在其周围添加描边?

How to set gradient as text color as well as add stroke around it in TextView Android?

我想将渐变设置为文本颜色,同时我希望文本在 TextView 中也有实心笔触。到目前为止,我实现的是文本只能显示渐变或描边,不能同时显示两者。

我创建了一个带有扩展 TextView 的自定义 class,我正在使用以下方法:

用这个画笔画:

paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(_strokeWidth);
setTextColor(_strokeColor);

这给了我这个结果:

使用以下代码添加渐变:

Shader textShader = new LinearGradient(0f, 0f, getWidth(), getTextSize(), gradientColorsArray, null, Shader.TileMode.CLAMP);
                paint.setShader(textShader);

它给了我以下结果:

问题是当我结合以上两种方法时,绘制了笔划,但笔划的颜色与我给绘画对象的渐变相同。

下面是我想要达到的结果。如果有人能指导我如何达到预期的结果,那就太好了。

所以等了4天多,研究了很多,终于能够成功达到预期的输出。

我犯的错误是在绘制对象上绘制笔划时,我将笔划颜色设置为 textcolor。这次我做的是创建一个 LinearGradient() 对象,并在设置 paintStyle(Paint.Style.Stroke).

时将其交给 paint.shader
Paint paint = this.getPaint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(5f);
        paint.setShader(new LinearGradient(0f, 0f, getTextSize(), getTextSize(), mOutlineColor, mOutlineColor, Shader.TileMode.CLAMP));

在我的 CustomTextView class 的 onDraw() 方法中设置笔划后,我调用了 super.onDraw(canvas)

然后我为渐变颜色创建一个新的 LinearGradient() 对象,如下所示:

 Paint paint = this.getPaint();
        paint.setStyle(Paint.Style.FILL);
        Shader linearShader = new LinearGradient(0f, 0f, getWidth(), getTextSize(), colors, null,
                Shader.TileMode.CLAMP);
        paint.setShader(linearShader);

终于再次调用 super.onDraw(canvas),这为我的 textview 提供了笔触和渐变作为 textColor。