Я просто пытался понять, как это сделать, и не мог найти хорошего руководства в Интернете, но в конце концов понял это. Как предложил Стив Помрой, вам нужно сделать что-то более активное. Чтобы получить эффект обведенного текста, вы рисуете текст дважды: один раз толстым контуром, а затем второй раз мы рисуем основной текст поверх контура. Но задача упрощается, потому что вы можете очень легко адаптировать один из примеров кода, поставляемых с SDK, а именно тот, который находится под этим именем в вашем каталоге SDK: "/ samples / android- / ApiDemos / src / com / example / android /apis/view/LabelView.java ". Его также можно найти на веб-сайте разработчика Android здесь .
В зависимости от того, что вы делаете, очень легко увидеть, что вам нужно будет только внести незначительные изменения в этот код, например изменить его для расширения из TextView и т. Д. Прежде чем я обнаружил этот образец, я забыл переопределить onMeasure () (который вы должны сделать в дополнение к переопределению onDraw (), как указано в руководстве «Создание пользовательских компонентов» на веб-сайте разработчика Android), что является одной из причин, по которой у меня возникли проблемы.
Как только вы это сделаете, вы сможете делать то, что сделал я:
public class TextViewOutline extends TextView {
private Paint mTextPaint;
private Paint mTextPaintOutline;
...
private void initTextViewOutline() {
mTextPaint = new Paint();
mTextPaint.setAntiAlias(true);
mTextPaint.setTextSize(16);
mTextPaint.setColor(0xFF000000);
mTextPaint.setStyle(Paint.Style.FILL);
mTextPaintOutline = new Paint();
mTextPaintOutline.setAntiAlias(true);
mTextPaintOutline.setTextSize(16);
mTextPaintOutline.setColor(0xFF000000);
mTextPaintOutline.setStyle(Paint.Style.STROKE);
mTextPaintOutline.setStrokeWidth(4);
setPadding(3, 3, 3, 3);
}
...
...
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(mText, getPaddingLeft(), getPaddingTop() - mAscent,
mTextPaintOutline);
canvas.drawText(mText, getPaddingLeft(), getPaddingTop() - mAscent, mTextPaint);
}
Итак, чтобы получить эффект обрисованного текста, вы рисуете текст дважды: один раз толстым контуром, а затем второй раз мы рисуем основной текст поверх контура.