Я просто пытался понять, как это сделать, и не смог найти хорошего гида в Интернете, но в конце концов понял.Как предположил Стив Померой, вы должны сделать что-то более сложное.Чтобы получить эффект выделенного текста, вы рисуете текст дважды: один раз жирным контуром, а второй раз мы рисуем основной текст поверх контура.Но задача стала проще, потому что вы можете очень легко адаптировать один из примеров кода, поставляемых с 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; //add another paint attribute for your outline
...
//modify initTextViewOutline to setup the outline style
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);
}
...
//make sure to update other methods you've overridden to handle your new paint object
...
//and finally draw the text, mAscent refers to a member attribute which had
//a value assigned to it in the measureHeight and Width methods
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(mText, getPaddingLeft(), getPaddingTop() - mAscent,
mTextPaintOutline);
canvas.drawText(mText, getPaddingLeft(), getPaddingTop() - mAscent, mTextPaint);
}
Итак, чтобы получить эффект выделенного текстаВы рисуете текст дважды: один раз с толстым контуром, а затем второй раз, когда мы рисуем основной текст поверх контура.