Подтвердить что ты не робот

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

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

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

text with different stroke and fill colors

4b9b3361

Ответ 1

Внутри пользовательского 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);
}

Ответ 2

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

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

Ответ 3

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

ссылка

 TextView test = (TextView) findViewById(R.id.test);

 test.setShadowLayer(float, float, float, int);

Ответ 4

Я использовал первое решение выше, чтобы придумать эту идею: положил более крупный текст 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 и вышел очень тонким.