Как нарисовать текст с разными штрихами и цветами заливки?
Я хочу отобразить текст, как показано ниже в моем приложении. Я использую класс Paint
со стилем FILL_AND_STROKE
для достижения этого. Но для установки цвета доступен только один метод setColor()
.
Как установить разные цвета штриховки и заливки?
![text with different stroke and fill colors]()
Ответы
Ответ 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 и вышел очень тонким.