Как нарисовать текст с разными штрихами и цветами заливки?

Я хочу отобразить текст, как показано ниже в моем приложении. Для этого я использую класс Paint со стилем FILL_AND_STROKE . Но для установки цвета доступен только один метод setColor() .

Как установить различные цвета штриховки и заливки?

Текст с разными штрихами и цветами заливки

Внутренний пользовательский TextView (не работает в EditText):

 @Override public void onDraw(Canvas canvas) { final ColorStateList textColor = getTextColors(); TextPaint paint = this.getPaint(); paint.setStyle(Style.STROKE); paint.setStrokeJoin(Join.ROUND); paint.setStrokeMiter(10); this.setTextColor(strokeColor); paint.setStrokeWidth(strokeWidth); super.onDraw(canvas); paint.setStyle(Style.FILL); setTextColor(textColor); super.onDraw(canvas); } 

Не используйте FILL_AND_STROKE. Нарисуйте один раз с помощью FILL, а затем измените цвет и нарисуйте с помощью STROKE.

(Это работает для прямоугольников. Я не уверен, что STROKE работает вообще для текста. Вам придется попробовать его и узнать.)

Не совсем уверен, но, возможно, вы могли бы использовать это:

ссылка

  TextView test = (TextView) findViewById(R.id.test); test.setShadowLayer(float, float, float, int); 

Я использовал первое решение выше, чтобы придумать эту идею: положил более крупный текст STROKE, а затем наложил его на меньший текст FILL_AND_STROKE:

 mScorePaint = new TextPaint(); mScorePaint.setTextSize(63); mScorePaint.setStyle(Style.STROKE); mScorePaint.setStrokeJoin(Join.ROUND); mScorePaint.setStrokeMiter(10.0f); mScorePaint.setStrokeWidth(frameWidth/50.0f); // about 12 mScorePaint.setColor(0xffff0000); // black c.drawText(Integer.toString(mScore), x, y, mScorePaint); // red first mScorePaint.setStrokeWidth(frameWidth/125.0f); // about 5 mScorePaint.setColor(0xff000000); // red c.drawText(Integer.toString(mScore), x, y, mScorePaint); // black on top 

Потому что только FILL не видел ни одного из атрибутов Stroke и вышел очень тонким.