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

Ars*_*lan 8 java android gradient textview

我想将渐变设置为文本颜色,同时我希望文本在TextView. 到目前为止,我所实现的是文本只能显示渐变或笔画,不能同时显示两者。

我创建了一个扩展的自定义类TextView,并且使用以下方法:

用它来绘制描边:

paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(_strokeWidth);
setTextColor(_strokeColor);
Run Code Online (Sandbox Code Playgroud)

这给了我这个结果:

在此输入图像描述

使用以下代码添加渐变:

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

它给了我以下结果:

在此输入图像描述

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

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

在此输入图像描述

Ars*_*lan 3

经过4天多的等待和大量的研究,我终于能够成功地达到预期的输出。

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

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));
Run Code Online (Sandbox Code Playgroud)

onDraw()在我的类方法中设置笔划后CustomTextView,我调用了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);
Run Code Online (Sandbox Code Playgroud)

最后再次调用super.onDraw(canvas),这给了我textview一个笔画以及文本颜色的渐变。